AWK 匹配字符串,而不是正则表达式

AWK 匹配字符串,而不是正则表达式

如何将字符串与 AWK 进行匹配?

假设我有 string ,[(*.+它应该只匹配包含 string 的字符串[(*.+

该字符串由用户输入,因此如果您知道可以转义正则表达式的 cli 实用程序,它也可能起作用。

编辑:

它还应该匹配包含该字符串的字符串,例如foo[(*.+bar.

答案1

awk使用运算符进行字符串比较==,使用index(haystack, needle)函数进行字符串搜索。

read -r string # user types [(*.+
{ echo 'stuff [(*.+ stuff'; echo ')]*.+'; } | awk -v string="$string" 'index($0, string)'
# output: 'stuff [(*.+ stuff'

答案2

基本上,awk 将 "" 内的字符视为字符串,将 // 内的字符视为正则表达式:

[root@me ~]# echo "[(*.+" | gawk '"[(*.+"'
[(*.+
[root@me~]# echo "[(*.+" | gawk '/[(*.+/'
gawk: /[(*.+/
gawk:  ^ unterminated regexp
gawk: fatal: Unmatched [ or [^: /[(*.+//

相关内容