Saya telah meneliti ini banyak, tapi saya masih belum jelas tentang hal itu. Apa yang dimaksud dengan batas kata berarti? Apa fungsinya?
Jadi, misalnya, bisakah seseorang menjelaskan perintah ini kepada saya?
egrep 'b[A-Z]+b' filename.sh
Jawaban yang Diterima:
Seperti yang dijelaskan di sini, misalnya, ini cocok dengan antara kata-kata:
Ada tiga posisi berbeda yang memenuhi syarat sebagai batas kata:
- Sebelum karakter pertama dalam string, jika karakter pertama adalah karakter kata.
- Setelah karakter terakhir dalam string, jika karakter terakhir adalah karakter kata.
- Antara dua karakter dalam string, yang satu adalah karakter kata dan yang lainnya bukan karakter kata.
Berikut adalah contoh dari masing-masing kasus tersebut:
-
Untuk string
foobar
, kasus pertama cocokfoobar ^-----here
-
Untuk string
foobar
, kasus kedua cocokfoobar ^--here
-
Untuk string
foo bar
, kasus ketiga akan cocokfoo bar ^--here, because space is not a word character
Apa yang memenuhi syarat sebagai karakter kata tergantung pada implementasi ekspresi reguler tertentu. Namun, dalam semua kasus, huruf ([a-z]
dan [A-Z]
), angka ([0-9]
) dan _
dianggap sebagai karakter kata.
Jadi, contoh ekspresi reguler yang Anda posting (b[A-Z]+b
) berarti menemukan string terpanjang yang berada di antara dua batas kata dan hanya terdiri dari huruf besar. Mungkin lebih mudah untuk menjelaskan dengan contoh:
echo "FOOBAR" | egrep 'b[A-Z]+b' # Works
echo "FOO BAR" | egrep 'b[A-Z]+b' # Works
echo "aFOOBARb" | egrep 'b[A-Z]+b' # Does not work, we want capitals only
echo "12345" | egrep 'b[A-Za]+b' # Does not work, no letters
echo "1FOOBAR2" | egrep 'b[A-Z]+b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep 'b[A-Z]+b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep 'b[A-Z]+b' # Works, # and $ are not word chars