sed表达式:行显示两次

sed表达式:行显示两次,sed,Sed,我使用sed命令解析csv文件,如下所示: sed -n -e 's/abc/&/p' -e 's/xyz/&/p' <input >output sed-n-e's/abc/&/p'-e's/xyz/&/p'输出 现在,如果一行中同时有两行(abc和xyz),我将在输出中有两行。我应该只吃一次 如果您只想打印带有“abc”或“xyz”的行,我可以使用sed?: 其他工具: grep -F -e abc -e xyz awk '/abc/ || /xyz/' 我

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

sed -n -e 's/abc/&/p' -e 's/xyz/&/p' <input >output
sed-n-e's/abc/&/p'-e's/xyz/&/p'输出
现在,如果一行中同时有两行(
abc
xyz
),我将在输出中有两行。我应该只吃一次


如果您只想打印带有“abc”或“xyz”的行,我可以使用
sed

其他工具:

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

我相信你只是为了打印行而错误地使用了s///p。这在sed中不是必需的-您可以使用//p打印它们

不过,这两个表达式都会求值,因此您仍有复制的风险。您的最佳选择(对于大型数据集也是最快的选择)是将“或”行为构建到匹配的regexp中:

sed -Ene '/abc|xyz/p' input >output
sed-n-r-e的/(abc | xyz)/&/p的输出
-r
标志用于启用扩展正则表达式(在GNU中)


对于非GNU sed(其中
|
不允许作为或)

sed的哪个版本有
-E
?这是BSD的味道吗?是的-E触发“现代”正则表达式模式,将\|变为|。
sed -Ene '/abc|xyz/p' input >output
sed -n -r -e 's/(abc|xyz)/&/p' <input >output
sed -n '/abc/{p;b
   }
/xyz/p' Input > Output