我需要使用 sed 来查找文件中具有模式“[whatever]|[whatever]”的所有行,所以我使用以下正则表达式:
sed '/\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"/p' test2.txt
但它不起作用,因为在这个文件中它不应该返回一些东西
RTV0031605951US|3160595|20/03/2013|0|"Laurie Graham"|"401"
有人知道我应该使用正则表达式吗?提前致谢
sed '/\B\"[ [:alnum:]]\+\"|\"[ [:alnum:]]\+\"\B/!d' file
如果您在sed
脚本中使用它,请不要转义双引号。
我发现您的正则表达式存在三个问题:
+
不是元字符,因此您需要对其进行转义以获得其特殊含义。Sed
默认情况下打印匹配的每一行,所以添加-n
它可以避免这种情况,如果你已经使用/p
它来打印它。否则,您将在输出中有两次这些行。sed
将输出任何部分匹配的内容。
要仅匹配与您的正则表达式匹配的整行,请将^
和添加$
到开始/结束:
sed '/^\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"$/p' test2.txt