web-dev-qa-db-fra.com

Comment faire pour correspondre à tout caractère non blanc sauf un particulier?

En Perl \S correspond à n'importe quel caractère non-blanc.

Comment faire pour correspondre à tout caractère non-blanc sauf une barre oblique inverse \?

95
Lazer

Vous pouvez utiliser un classe de caractères :

/[^\s\\]/

correspond à tout ce qui n'est ni un caractère ni un \. Voici un autre exemple:

[abc] _ signifie "faire correspondre a, b ou c"; [^abc] signifie "correspond à tout caractère sauf a, b ou c".

132
Tim Pietzcker

Vous pouvez utiliser un lookahead:

/(?=\S)[^\\]/
12

Cela a fonctionné pour moi avec sed [Edit: le commentaire ci-dessous indique que sed ne prend pas en charge\s]

[^ ]

tandis que

[^\s] 

n'a pas

# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg

echo "ghai ghai" | sed "s/[^ g]//g"
g g
2
storm_m2138

Sur mon système: CentOS 5

Je peux utiliser \s en dehors des collections mais doit utiliser [:space:] à l'intérieur des collections. En fait, je peux utiliser [:space:] uniquement dans les collections. Donc, pour correspondre à un seul espace en utilisant cela, je dois utiliser [[:space:]] Ce qui est vraiment étrange.

echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"

Result: a b cX
  • premier espace je correspond avec \s
  • deuxième espace je correspond alternativement avec [[:space:]]
  • le X je correspond avec "tout mais pas d'espace" [^[:space:]]

Ces deux ne fonctionneront pas:

a[:space:]b  instead use a\sb or a[[:space:]]b

a[^\s]b      instead use a[^[:space:]]b
0
Torge