Как сопоставить любой символ без пробела, кроме определенного?
В Perl \S
соответствует любой символ без пробелов.
Как я могу сопоставить любой символ без пробелов, кроме обратного слэша \
?
Ответы
Ответ 1
Вы можете использовать класс :
/[^\s\\]/
соответствует любому символу пробела, а не символу \
. Вот еще один пример:
[abc]
означает "соответствие a
, b
или c
"; [^abc]
означает "соответствовать любому символу, кроме a
, b
или c
".
Ответ 2
Вы можете использовать lookahead:
/(?=\S)[^\\]/
Ответ 3
Это сработало для меня с помощью комментария sed [ Изменить: ниже, если sed не поддерживает \s]
[^ ]
а
[^\s]
не
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
Ответ 4
В моей системе: CentOS 5
Я могу использовать \s
вне коллекций, но должен использовать [:space:]
внутри коллекций. На самом деле я могу использовать [:space:]
только внутри коллекций. Поэтому, чтобы соответствовать одному пространству, используя это, я должен использовать [[:space:]]
Что действительно странно.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
- Первое пространство, которое я сопоставляю с
\s
- второе пространство Я сопоставляю альтернативно с
[[:space:]]
- X я соответствует "все, но не пробел"
[^[:space:]]
Эти два не будут работать:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b