Saya sudah banyak meneliti ini, tetapi saya masih belum jelas. Apa arti batas kata ? Apa fungsinya?
Jadi, misalnya, bisakah seseorang menjelaskan perintah ini kepada saya?
egrep '\b[A-Z]+\b' filename.sh
Saya sudah banyak meneliti ini, tetapi saya masih belum jelas. Apa arti batas kata ? Apa fungsinya?
Jadi, misalnya, bisakah seseorang menjelaskan perintah ini kepada saya?
egrep '\b[A-Z]+\b' filename.sh
Jawaban:
Seperti dijelaskan di sini , misalnya, itu cocok dengan 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, di mana satu adalah karakter kata dan yang lainnya bukan karakter kata.
Berikut adalah contoh dari masing-masing kasus tersebut:
Untuk string foobar
, case pertama cocok
foobar
^-----here
Untuk string foobar
, case kedua cocok
foobar
^--here
Untuk string foo bar
, case ketiga akan cocok
foo bar
^--here, because space is not a word character
Apa yang memenuhi syarat sebagai karakter kata tergantung pada implementasi ekspresi reguler spesifik. Namun dalam semua kasus, huruf ( [a-z]
dan [A-Z]
), angka ( [0-9]
) dan _
dianggap sebagai karakter kata.
Jadi, contoh regex yang Anda posting ( \b[A-Z]+\b
) berarti menemukan string terpanjang di antara dua batas kata dan yang hanya terdiri dari huruf besar. Mungkin lebih mudah untuk dijelaskan 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
egrep
(atau /usr/xpg4/bin/egrep
) tidak memperlakukan \b
cara ini. Misalnya, echo "FOOBAR" | egrep '\b[A-Z]+\b'
tidak akan cocok.
egrep '\b[A-Z]+\b' filename.sh
Mari kita hancurkan:
[A-Z]
mewakili salah satu karakter di kelas karakter
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
mewakili satu atau lebih kemunculan karakter huruf besar. Misalnya pertandingan akan menjadi: A
, HELLO
, IS
, I
, ELEPHANT
, dll'\bINDIA\b'
: persis seperti pencarian KATA SELURUH untuk kata INDIA
dalam huruf besar. TIDAK akan cocok INDIANA
. Dengan demikian menerapkan prinsip yang sama - '\b[A-Z]+\b'
akan mencari seluruh kata memiliki satu atau lebih huruf dalam huruf besar.egrep '\b[A-Z]+\b' filename.sh
akan mencari kata-kata yang memiliki satu atau lebih huruf semua huruf besar dalam file - filename.sh
.\b
- Persis seperti seluruh pencarian kata.
[azA-Z0-9_]
. Periksa manual untukegrep(1)
, mungkin doumentation untuk ekspresi reguler yang digunakan.