我想匹配文件中所有以我的单词为前缀的行,或者该行是我的单词的前缀的行。例如,搜索“abc”应该匹配:
ab abc abcd abcxyz
但不是:
xabc
zzab
xaz
“我的单词是前缀”部分很简单,^abc
当然只需匹配“”,但我还没有想出“行是我的单词的前缀”部分的解决方案。在 awk 中尝试了一些方法,但无法将行内容作为正则表达式的一部分。
答案1
您需要处理两种情况:行比您的搜索字符串短或比您的搜索字符串长。
当它更长时,您想测试该行的开头是否等于测试字符串。
当它更短时,您要测试搜索字符串的开头是否等于该行。
如果长度相等,则两种方法都可以。
awk -v search=abc 'length() > length(search) ? substr($0, 1, length(search)) == search : substr(search, 1, length()) == $0' inputfile