Cara menemukan spasi dalam teks. menggunakan grep?


13

Bagaimana cara mendapatkan satu spasi dalam teks?

cat a.txt| grep ' '

atau

cat a.txt| grep '\s '

7
Penggunaan gratis catdalam kedua kasus. Yang pertama bisa ditulis grep ' ' a.txt, yang kedua diubah sama.
MadHatter

1
Perhatikan bahwa \sjuga cocok dengan tab, kembali, tab vertikal, umpan formulir dan, secara teknis, baris baru. Jika Anda hanya ingin mencocokkan ruang dan tab, gunakan [[:blank:]]atau [ \t].
Dijeda sampai pemberitahuan lebih lanjut.

menggunakan gnu grep, Anda dapat membatasi jumlah kecocokan ( -mopsi) menjadi satu ...
sendmoreinfo

Ini adalah egrep "\ s" a.txt yang lebih sederhana

Jawaban:


6

Jika Anda ingin menangkap hanya satu ruang saat Anda memasukkan pertanyaan Anda, Anda akan menggunakan sesuatu seperti:

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

atau untuk varian POSIX:

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

atau varian POSIX yang kurang mudah dibaca:

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

Dengan asumsi Anda ingin mengecualikan garis yang berisi lebih dari satu ruang yang berdekatan, ini secara eksplisit mengharuskan ada satu ruang, tidak diawali oleh spasi dan tidak diikuti oleh spasi.

Juga, perlu dicatat bahwa tidak semua versi kontrol ekspresi reguler grep mendukung.


1
Anda dapat menghilangkan semua garis miring terbalik dari contoh terakhir dan meningkatkan keterbacaan dengan menggunakan -Eopsi yang ditentukan POSIX yang memungkinkan regex diperluas. grep -E '(^|[^ ]) ([^ ]|$)' a.txtBagaimanapun, garis miring terbalik sebelum ruang tidak diperlukan dan ada satu yang hilang sebelum tanda kurung penutupan terakhir. Juga, untuk versi grepyang mengerti \s, Anda dapat mempersingkat ekspresi untuk non-spasi [^\s]menjadi\S
Dijeda hingga pemberitahuan lebih lanjut.

Namun ini juga berhasil, [[: blank:]]
Emax

4

Saya rasa saya menemukannya:

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

1

Varian 2 hanya akan menemukan dua spasi. Jika Anda menggunakan'\s' , kedua varian akan berfungsi.

Anda dapat dengan mudah menguji ini sendiri, jadi apa pertanyaan Anda yang sebenarnya?


1
Mengapa hanya menemukan dua spasi? Saya pikir itu cocok dengan ruang apa pun.
cuonglm

1
@Gnouc: Varian 2 saat dia menulis itu '\s 'akan cocok dengan setidaknya dua spasi berturut-turut, karena dia menambahkan karakter spasi setelah grup karakter \s.
Sven

Anda benar, saya tidak melihat ruang setelah \s, kesalahan saya.
cuonglm
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.