sed表达式:行显示两次

时间:2014-01-14 19:15:45

标签: sed

我正在使用sed命令解析csv文件,如下所示:

sed -n -e 's/abc/&/p' -e 's/xyz/&/p' <input >output

现在,如果同时存在一行(abcxyz),我将在输出中输入两行。我应该只有一次。

我可以使用sed吗?

4 个答案:

答案 0 :(得分:3)

如果您只想打印带有“abc”或“xyz”的行:

sed -n '/abc\|xyz/p'

其他工具:

grep -F -e abc -e xyz
awk '/abc/ || /xyz/'

答案 1 :(得分:0)

我相信你错误地使用s /// p来打印线条。这在sed中不是必需的 - 您可以使用// p

打印它们

但是,这两个表达式都会进行评估,因此您仍然存在重复的风险。您最好的选择(对于大型数据集而言最快)将在匹配的正则表达式中构建“或”行为:

sed -Ene '/abc|xyz/p' input >output

答案 2 :(得分:0)

sed -n -r -e 's/(abc|xyz)/&/p' <input >output

-r标志用于启用扩展正则表达式(在GNU sed中)

答案 3 :(得分:0)

sed -n '/abc/{p;b
   }
/xyz/p' Input > Output

表示非GNU sed(其中|不允许为OR)