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, balbo c”; [^abc]oznacza „dowolny znak z wyjątkiem a, balbo 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.
gmodyfikator. /[^\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
\sdopasowuje 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ć \spoza 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/