0

我需要使用 sed 来查找文件中具有模式“[whatever]|[whatever]”的所有行,所以我使用以下正则表达式:

sed '/\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"/p' test2.txt

但它不起作用,因为在这个文件中它不应该返回一些东西

RTV0031605951US|3160595|20/03/2013|0|"Laurie Graham"|"401"

有人知道我应该使用正则表达式吗?提前致谢

4

3 回答 3

0
sed '/\B\"[ [:alnum:]]\+\"|\"[ [:alnum:]]\+\"\B/!d' file

如果您在sed脚本中使用它,请不要转义双引号。

于 2013-09-04T19:05:43.947 回答
0

我发现您的正则表达式存在三个问题:

  1. +不是元字符,因此您需要对其进行转义以获得其特殊含义。
  2. 管道也会发生类似的问题。它也不是元字符,所以不要转义它以匹配它的字面意思。
  3. Sed默认情况下打印匹配的每一行,所以添加-n它可以避免这种情况,如果你已经使用/p它来打印它。否则,您将在输出中有两次这些行。
于 2013-09-04T13:21:53.550 回答
0

sed将输出任何部分匹配的内容。

要仅匹配与您的正则表达式匹配的整行,请将^和添加$到开始/结束:

sed '/^\"[a-zA-Z0-9]+\|[a-zA-Z0-9]+\"$/p' test2.txt
于 2013-09-04T13:23:59.863 回答