Réponses:
Vous pouvez utiliser une classe de caractères :
/[^\s\\]/
correspond à tout ce qui n'est pas un caractère d'espacement ni un \
. Voici un autre exemple:
[abc]
signifie "match a
, b
ou c
"; [^abc]
signifie "correspond à n'importe quel caractère sauf a
, b
ou c
".
$0~/\s*^\s/
suivie de tout caractère qui n'est pas un espace blanc
/^\s+/
- au début de la ligne, suivi d'un ou plusieurs caractères d'espacement.
g
modificateur. /[^\s\\]/g
Vous pouvez utiliser une anticipation:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Ce qui suit a bien fonctionné pour moi (?=\S)[^"]*
.
Cela a fonctionné pour moi en utilisant sed [ Modifier: 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
\s
correspond à plus que le caractère d'espace. Il inclut TAB, retour chariot de saut de ligne et autres (le nombre d' autres dépend de la saveur de l'expression régulière). C'est une invention Perl, à l'origine un raccourci pour la classe de caractères POSIX [:space:]
, et non prise en charge dans sed
. Votre premier regex ci-dessus devrait être s/[^[:space:]g]//g
.
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Rendements:g g
Sur mon système: CentOS 5
Je peux utiliser en \s
dehors des collections, mais je dois utiliser à l' [:space:]
intérieur des collections. En fait, je ne peux utiliser [:space:]
que des collections internes. Donc, pour faire 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
([^[:space:]])
place de ([^\s])
. Je suis sur openSUSE Tumbleweed 2018 04 03.
^
interprété comme négation et quand comme début de ligne? À cet égard, pourquoi cela ne correspondra pas à une ligne commençant par un nombre d'espaces blancs$0~/\s*^\s/