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 \
?
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
".
Vous pouvez utiliser un lookahead:
/(?=\S)[^\\]/
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
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
\s
[[:space:]]
[^[: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