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

sumber
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
Joseph R.
sumber
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.

Stéphane Chazelas
sumber
1

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

grep -E ':[[:alnum:]]{1,100}:' ~/x.txt
Msegade
sumber
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
sherrellbc
sumber
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