grep untuk string alfanumerik dengan panjang berapa pun dengan titik dua di setiap sisi


14

Bagaimana Anda memahami string alfanumerik yang terdiri dari 1 hingga 50 karakter (idealnya, berapa pun panjangnya akan berfungsi juga) dengan titik dua di setiap sisi - hasil khasnya adalah semua baris yang berisi string :shopping:. Sejauh ini saya punya kode di bawah ini (saya sudah mencoba beberapa variasi di atasnya) yang tidak berfungsi:

grep ':[[:alnum:]]{1,100}:' ~/x.txt

Anda hanya perlu mengaktifkan kapabilitas regex yang diperluas grepdengan menyertakan -Esakelar.
slm

Jawaban:


13

Anda perlu mengaktifkan ekspresi reguler yang diperluas untuk ini:

grep -E ':[[:alnum:]]+:' ~/x.txt

4

Dengan ekspresi reguler dasar, Anda dapat menulis seperti:

grep ':[[:alnum:]]\{1,100\}:' ~/x.txt

Perhatikan bahwa \{(sebagai lawan \+atau \?misalnya) adalah standar dan portabel, dan sebenarnya setara dengan BRE +dan ?biasanya ditulis dengan \{: \{1,\}dan \{0,1\}. grep -Ejuga standar dan portabel, jadi Anda sebaiknya menggunakannya karena membuat regexps lebih mudah dibaca dalam kasus tersebut.


1

Anda menggunakan expresi reguler yang diperluas sehingga Anda perlu menggunakan opsi -E:

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt

Terima kasih! Saya menempatkan jawaban yang lain sebagai benar karena saya tidak menulis skrip "ideal" saya di judul, dan saya tidak ingin menyebabkan orang-orang yang mencari jawaban untuk menyalin jawaban yang salah, tetapi saya akan menggunakan jawaban Anda. :)

1
@TorThommesen - Anda dapat mengedit judul Q Anda jika itu tidak benar.
slm

0

Karena tidak ada orang lain yang menyebutkannya, Anda juga dapat menggunakan egrep, yang, seperti yang saya pahami, setara dengan grep -E.

egrep ':[[:alnum:]]{1,100}:' ~/x.txt

1
egrepadalah perintah historis untuk dipahami dengan ERE. Fungsionalitas grep dan egrep sejak (dahulu) telah digabungkan menjadi grep dengan opsi -E. egrepsekarang dianggap usang / usang (tetapi tidak mungkin untuk pergi karena beberapa orang masih terbiasa).
Stéphane Chazelas
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.