我的文件很大,我只想复制以
开头的行,H|756|F:BRN\
但是当我这样做
awk '$1 ~ /^ ,H|756|F:BRN\/' file_1.txt > file_2.txt
我得到:
awk:第1行:失控的正则表达式/ ^,H | 756 | F ...
答案 0 :(得分:2)
正则表达式匹配中的元字符需要适当地转义以实现您要执行的操作。默认情况下,awk
支持|
的扩展正则表达式(ERE)具有特殊含义以进行备用匹配,因此您需要对其进行转义以剥夺其特殊含义,并按字面意义将其相同申请\
awk '/^,H\|756\|F:BRN\\/' file
此外,您无需在~
上使用明确的$1
匹配。对于像这样的简单情况,以/regex/
开头的字符串模式更容易实现。
答案 1 :(得分:2)
如果文件“很大”,则可以考虑使用grep
或ack
或ag
,这可能会为您带来更好的性能。
grep '^,H|756|F:BRN\\' input > output
grep默认使用BRE
,因此您不必逃脱管道|
。但是结尾的反斜杠应该可以逃脱。