Seperti yang mungkin sudah Anda ketahui, banyak fitur yang didukung oleh mesin RegEx modern (referensi balik, pernyataan lookaround, dll.) Tidak didukung oleh mesin Bash RegEx. Berikut ini adalah skrip Bash sederhana yang baru saja saya buat untuk mencoba menjelaskan apa tujuan akhir saya:
#!/bin/bash
# Make sure exactly two arguments are passed.
if [ $# -lt 2 ]
then
echo "Usage: match [string] [pattern]"
return
fi
variable=${1}
pattern=${2}
if [[ ${variable} =~ ${pattern} ]]
then
echo "true"
else
echo "false"
fi
Jadi misalnya, sesuatu seperti perintah berikut ini akan kembali salah:
. match.sh "catfish" "(?=catfish)fish"
sedangkan ekspresi yang sama persis akan menemukan kecocokan saat digunakan dalam Perl atau penguji regex JavaScript.
Referensi balik (mis. (Expr1) (expr2) [] \ 1 \ 2) tidak akan cocok juga.
Saya hanya sampai pada kesimpulan bahwa masalah saya hanya akan diselesaikan ketika memaksa bash untuk menggunakan mesin RegEx yang kompatibel dengan Perl. Apakah ini bisa dilakukan? Jika demikian, bagaimana saya menjalankan prosedur?
grep
dengan -P
atau menggunakan sed
?
re="([a-z])[0-9]\1"; [[ a1a =~ $re ]] && echo ${BASH_REMATCH[0]}