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.