Как сопоставить любой символ без пробела, кроме конкретного?
В Perl S
соответствует любому символу.
Как я могу сопоставить любой символ без пробела, кроме обратной косой черты ?
4 ответа:
можно использовать класс персонажа:
/[^\s\]/
соответствует всему, что не является символом пробела или
\
. Вот еще один пример:
[abc]
означает "матчa
,b
илиc
";[^abc]
означает " соответствует любому символу, кромеa
,b
илиc
".
Это сработало для меня с помощью sed [Edit: комментарий ниже указывает, что 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
в моей системе: CentOS 5
Я могу использовать
\s
вне коллекций, но должны использовать[:space:]
внутри коллекций. На самом деле я могу использовать[:space:]
только внутри коллекции. Поэтому, чтобы соответствовать одному пространству, используя это, я должен использовать[[:space:]]
Что действительно странно.echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: /" Result: a b cX
- первый пробел, который я сопоставляю с
\s
- второй пробел я сопоставляю альтернативно с
[[:space:]]
- X I соответствует "все, но нет места"
[^[:space:]]
эти два не будут работать:
a[:space:]b instead use a\sb or a[[:space:]]b a[^\s]b instead use a[^[:space:]]b