Yanıtlar:
Bir karakter sınıfı kullanabilirsiniz :
/[^\s\\]/
boşluk karakteri veya a olmayan herhangi bir şeyle eşleşir \. İşte başka bir örnek:
[abc]vasıtası "maç a, bya da c"; [^abc]vasıta "dışındaki tüm karakterler maç a, bya c".
$0~/\s*^\s/ardından beyaz boşluk olmayan herhangi bir karakter gelen aşağıdaki eşleşme satırı
/^\s+/- satır başlangıcı ve ardından bir veya daha fazla boşluk karakteri olmalıdır.
gdeğiştiriciyi ekleyin . /[^\s\\]/g
Bir bakış kullanabilirsiniz:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN. Aşağıdakiler benim için iyi çalıştı (?=\S)[^"]*.
Bu, sed kullanarak benim için çalıştı [ Düzenle: aşağıdaki yorum, sed'in desteklemediğine işaret ediyor]
[^ ]
süre
[^\s]
yapmadı
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\sboşluk karakterinden daha fazlasıyla eşleşir. Bu TAB, linefeed satırbaşı ve diğerleri (nasıl dahil birçok diğerleri regex lezzet bağlıdır). Bu bir Perl icadı, orijinal olarak POSIX karakter sınıfının kısaltmasıdır [:space:]ve içinde desteklenmez sed. Yukarıdaki ilk normal ifadeniz olmalıdır s/[^[:space:]g]//g.
echo "ghai ghai" | sed "s/[^[:space:]g]//g" Verim:g g
Sistemimde: CentOS 5
\sKoleksiyonların dışında kullanabilirim ama koleksiyonların [:space:]içinde kullanmak zorundayım . Aslında [:space:]sadece iç koleksiyonları kullanabiliyorum . Yani bunu kullanarak tek bir alanı eşleştirmek için [[:space:]]
Hangisini kullanmalıyım gerçekten garip.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s[[:space:]][^[:space:]]Bu ikisi işe yaramayacak:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])yerine kullanmak zorunda olduğunuz görünüşe göre hala doğru ([^\s]). OpenSUSE Tumbleweed 2018 04
^olumsuzlama, ne zaman satır başlangıcı olarak yorumlanır? Bu bakımdan, bu neden beyaz boşlukların sayısıyla başlayan bir satırla$0~/\s*^\s/