我有一个文件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(使用前将#替换为@)