Bir metinde boşluk bulma. grep kullanıyor musunuz?


13

Metinde bir boşluk nasıl grep?

cat a.txt| grep ' '

veya

cat a.txt| grep '\s '

7
Karşılıksız kullanımı cather iki durumda da. Birincisi yazılabilir grep ' ' a.txt, ikincisi de benzer şekilde değişti.
MadHatter

1
\sSekme, döndürme, dikey sekme, form besleme ve teknik olarak yeni satır ile de eşleştiğini unutmayın . Yalnızca boşluk ve sekme ile eşleşmek istiyorsanız [[:blank:]]veya tuşlarını kullanın [ \t].
sonraki duyuruya kadar duraklatıldı.

gnu grep kullanarak, maç sayısını ( -mseçenek) biriyle
sınırlayabilirsiniz

Bu daha basit egrep "\ s" a.txt

Yanıtlar:


6

Sorunuza koyduğunuz gibi sadece bir boşluk için grep istiyorsanız, şöyle bir şey kullanırsınız:

grep -e '^\s[^\s]' -e '[^\s]\s$' -e '[^\s]\s[^\s]' a.txt

veya POSIX varyantları için:

grep -e '^ [^ ]' -e '[^ ] $' -e '[^ ] [^ ]' a.txt

veya daha az okunabilir POSIX varyantı:

grep '\(^\|[^ ]\)\ \([^ ]\|$)' a.txt

Birden fazla bitişik boşluk içeren satırları hariç tutmak istediğinizi varsayarsak, bu açıkça bir boşluktan önce gelir, ardından boşluk gelmez.

Ayrıca, grep'in tüm sürümlerinin normal ifade kontrollerini desteklemediğini belirtmek gerekir.


1
-EGenişletilmiş regex'leri etkinleştiren POSIX tarafından belirtilen seçeneği kullanarak tüm bu ters eğik çizgileri son örnekten atlayabilir ve okunabilirliği artırabilirsiniz . grep -E '(^|[^ ]) ([^ ]|$)' a.txtHer durumda, boşluktan önce ters eğik çizgi gerekli değildir ve son kapanış parantezinden önce bir eksik vardır. Ayrıca versiyonları için grepanlamak \s, olmayan alanı için ifadesini kısaltabilir [^\s]için\S
bir sonraki duyuruya kadar Duraklatıldı.

Ancak bu da işe yarıyor, [[: blank:]]
Emax

4

Sanırım buldum:

grep  "\+[[:space:]]\+" a.xml

1

Varyant 2 yalnızca iki boşluk bulacaktır. Eğer kullanırsanız '\s'yerine, her iki varyant çalışacaktır.

Bunu kolayca kendiniz test edebilirsiniz, peki asıl sorunuz nedir?


1
Neden sadece iki boşluk bulmalıyım? Bence her yere uyuyor.
cuonglm

1
@Gnouc: Döndürürken varyant 2, '\s 'arka arkaya en az iki boşlukla eşleşecek, çünkü karakter grubundan sonra bir boşluk karakteri ekledi \s.
Sven

Haklısın, sonraki boşluğu göremiyorum, \shatam.
cuonglm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.