awk 如何找到带括号的变量的匹配项?

2024-07-01

我有一个文件some_file.txt,我想在其中找到匹配线name方括号内(必须完全匹配,因为某些单词可能会重复 - 例如foo在下面的例子中)。 文档内容如下所示:

[foo](url)
[foo Foo](url)
[bar (Bar)](url)
[fizz buzz](url)

我想出了以下内容,但是当您指定时它就会中断name带括号。

file="some_file.txt"

name="foo" # Good
name="foo Foo" # Good
name="bar (Bar)" # No match :(
name="fizz buzz" # Good

matched_line=$(awk -v n="${name}]" '$0 ~ n {print NR}' "${file}")

我试图像这样转义括号name="bar \(Bar\)",但这没有帮助。


使用非正则表达式搜索index功能:

awk -v n='bar (Bar)' 'index($0, n) {print NR}' file
3

# be more precise and search with surrounding [ .. ]
awk -v n='bar (Bar)' 'index($0, "[" n "]") {print NR}' file
3

index函数执行纯文本搜索awk因此它不需要任何转义的特殊字符。

使用所有搜索词:

for name in 'foo' 'foo Foo' 'bar (Bar)' 'fizz buzz'; do
   awk -v n="$name" 'index($0, "[" n "]") {print NR, n}' file
done

1 foo
2 foo Foo
3 bar (Bar)
4 fizz buzz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

awk 如何找到带括号的变量的匹配项? 的相关文章

随机推荐