Как сопоставить любой символ без пробела, кроме определенного?
В 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