Sla*_*.In 1 regex bash shell awk
我有一个文件,我想在其中通过方括号内some_file.txt找到匹配行(它必须完全匹配,因为某些单词可能会重复 - 就像下面的示例所示)。文档内容如下所示:namefoo
[foo](url)
[foo Foo](url)
[bar (Bar)](url)
[fizz buzz](url)
Run Code Online (Sandbox Code Playgroud)
我想出了以下内容,但是当您name用括号指定时它会中断。
[foo](url)
[foo Foo](url)
[bar (Bar)](url)
[fizz buzz](url)
Run Code Online (Sandbox Code Playgroud)
我试图像这样逃避括号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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)