Відповіді:
Ви можете використовувати клас символів :
/[^\s\\]/
відповідає будь-якому, що не є символом пробілу і не \
. Ось ще один приклад:
[abc]
означає "збіг a
, b
або c
"; [^abc]
означає "відповідати будь-якому символу, крім" a
, b
або c
".
$0~/\s*^\s/
а за ними будь-який символ, який не є пробілами,
/^\s+/
- початок рядка, за яким слід один або кілька символів пробілу.
g
модифікатор. /[^\s\\]/g
Ви можете скористатися lookahead:
/(?=\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/