使用awk的正则表达式匹配以不合格字符串开头的行

时间:2018-06-19 14:59:26

标签: awk

我的文件很大,我只想复制以

开头的行
,H|756|F:BRN\

但是当我这样做

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

我得到:

  

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

2 个答案:

答案 0 :(得分:2)

正则表达式匹配中的元字符需要适当地转义以实现您要执行的操作。默认情况下,awk支持|的扩展正则表达式(ERE)具有特殊含义以进行备用匹配,因此您需要对其进行转义以剥夺其特殊含义,并按字面意义将其相同申请\

awk '/^,H\|756\|F:BRN\\/' file

此外,您无需在~上使用明确的$1匹配。对于像这样的简单情况,以/regex/开头的字符串模式更容易实现。

答案 1 :(得分:2)

如果文件“很大”,则可以考虑使用grepackag,这可能会为您带来更好的性能。

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

grep默认使用BRE,因此您不必逃脱管道|。但是结尾的反斜杠应该可以逃脱。