我正在使用sed
命令解析csv文件,如下所示:
sed -n -e 's/abc/&/p' -e 's/xyz/&/p' <input >output
现在,如果同时存在一行(abc
和xyz
),我将在输出中输入两行。我应该只有一次。
我可以使用sed
吗?
答案 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)