Как сопоставить любой символ без пробела, кроме определенного?

В 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