使用awk对以不一致字符串开头的行进行正则表达式匹配

使用awk对以不一致字符串开头的行进行正则表达式匹配,awk,Awk,我有一个巨大的文件,我只想从它的行开始复制 ,H|756|F:BRN\ 但当我这么做的时候 awk '$1 ~ /^ ,H|756|F:BRN\/' file_1.txt > file_2.txt 我得到: awk:第1行:失控正则表达式/^,H|756|F 正则表达式匹配中的元字符需要正确转义,以实现您试图执行的操作。在awk默认支持的扩展正则表达式中,|具有进行交替匹配的特殊含义,因此您需要对它进行转义,以剥夺它的特殊含义,并按字面意义对待它,这同样适用于\ 另外,您不需要在$1

我有一个巨大的文件,我只想从它的行开始复制

,H|756|F:BRN\
但当我这么做的时候

awk  '$1 ~ /^ ,H|756|F:BRN\/' file_1.txt > file_2.txt
我得到:

awk:第1行:失控正则表达式/^,H|756|F


正则表达式匹配中的元字符需要正确转义,以实现您试图执行的操作。在awk默认支持的扩展正则表达式中,|具有进行交替匹配的特殊含义,因此您需要对它进行转义,以剥夺它的特殊含义,并按字面意义对待它,这同样适用于\


另外,您不需要在$1上使用显式~match。对于这样一个比较简单的情况,以/ReXEX/OFF方式开始的字符串模式比较容易。

如果文件很大,可以考虑GRIP或ACK或AG,这样可以给您带来更好的性能。

grep '^,H|756|F:BRN\\' input > output

grep使用BRE作为默认值,因此您不必转义管道|。但是结尾的反斜杠你应该逃掉。

谢谢你的回答,我在这里学习。我发现证据表明grep比awk快。将不得不调整代码的其余部分这是许多awk命令的最后一个。最终可能会使用您的答案,但@Inian的答案与标题问题更相关
grep '^,H|756|F:BRN\\' input > output