Odpowiedzi:
Możesz użyć klasy postaci :
/[^\s\\]/
dopasowuje wszystko, co nie jest białym znakiem ani znakiem \
. Oto kolejny przykład:
[abc]
oznacza „meczu a
, b
albo c
”; [^abc]
oznacza „dowolny znak z wyjątkiem a
, b
albo c
”.
$0~/\s*^\s/
po których następuje dowolny znak, który nie jest białymi spacjami
/^\s+/
- początek wiersza, po którym następuje jeden lub więcej białych znaków.
g
modyfikator. /[^\s\\]/g
Możesz użyć lookahead:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. : . Poniższe działały dobrze dla mnie (?=\S)[^"]*
.
To zadziałało dla mnie przy użyciu sed [ Edytuj: komentarz poniżej wskazuje, że sed nie obsługuje \ s]
[^ ]
podczas
[^\s]
nie
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\s
dopasowuje więcej niż tylko znak spacji. Obejmuje TAB, wysuw powrót karetki i inne (jak wiele innych w zależności od smaku regex). To wynalazek Perla, pierwotnie skrót klasy znaków POSIX [:space:]
i nie jest obsługiwany w sed
. Twoje pierwsze wyrażenie regularne powyżej powinno mieć postać s/[^[:space:]g]//g
.
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
:g g
W moim systemie: CentOS 5
Mogę używać \s
poza kolekcjami, ale muszę używać [:space:]
wewnątrz kolekcji. W rzeczywistości mogę używać [:space:]
tylko wewnątrz kolekcji. Więc aby dopasować pojedynczą spację używając tego, muszę użyć [[:space:]]
Co jest naprawdę dziwne.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
Te dwa nie będą działać:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])
zamiast ([^\s])
. Jestem na openSUSE Tumbleweed 2018 04 03.
^
interpretowane jako negacja, a kiedy jako początek linii? W związku z tym, dlaczego nie pasuje do linii zaczynającej się od liczby białych spacji$0~/\s*^\s/