Ответы:
Вы можете использовать класс символов :
/[^\s\\]/
соответствует всему, что не является пробельным символом или символом \. Вот еще один пример:
[abc]означает «матч a, bили c»; [^abc]означает «любой символ , кроме a, bили c».
$0~/\s*^\s/за которым следует любой символ,
/^\s+/- начало строки, за которым следует один или несколько пробелов.
gмодификатор. /[^\s\\]/g
Вы можете использовать опережающий просмотр:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN. Следующее сработало для меня (?=\S)[^"]*.
Это сработало для меня, используя 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
\sсоответствует не только пробелу. Он включает TAB, возврат каретки перевода строки и другие ( количество других зависит от вкуса регулярного выражения). Это изобретение Perl, первоначально сокращенное для символьного класса POSIX [:space:]и не поддерживаемое в sed. Ваше первое регулярное выражение выше должно быть s/[^[:space:]g]//g.
echo "ghai ghai" | sed "s/[^[:space:]g]//g" Урожайность:g g
В моей системе: 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:]][^[:space:]]Эти два не будут работать:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])вместо ([^\s]). Я использую openSUSE Tumbleweed 2018 04 03.
^интерпретируется как отрицание, а когда как начало строки? В этом отношении, почему это не соответствует строке, начинающейся с количества пробелов,$0~/\s*^\s/