sed/awk/perl 匹配给定字符串的所有前缀

sed/awk/perl 匹配给定字符串的所有前缀

我想匹配文件中所有以我的单词为前缀的行,或者该行是我的单词的前缀的行。例如,搜索“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

相关内容