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
, b
ya da c
"; [^abc]
vasıta "dışındaki tüm karakterler maç a
, b
ya 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.
g
değ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
\s
boş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
\s
Koleksiyonları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/