为什么我的sed命令有时不会与r标志一起工作

时间:2014-01-31 03:31:23

标签: regex linux sed

我真的很困惑。

有时这个标志工作正常

sed -e 's/dd//gp' file

有时我需要使用

sed -re 's/dd//gp' file

有时候这个

sed -ren 's/dd//gp' file

有时候

sed -n 's/dd//gp' file

刚才我试图压制出局,但我一直跟着-ren旗帜

上周为其他正则表达式工作

现在我只能使用-n来抑制输出

组合之间有什么区别

我有这个共同点

sed -n 's/\/\*\*//gp' file适用于-n但不适用于-en

1 个答案:

答案 0 :(得分:2)

您可以使用man sed来确定sed的各种标志的用途。

仅在向-e指定多个引用块时才需要sed标志。

echo "foo" | sed 's/foo/bar/'
=> bar
echo "foo" | sed -e 's/foo/bar/' -e 's/bar/baz/'
=> baz

-r标记扩展sed的正则表达式以使用扩展正则表达式。

echo "foo" | sed 's/f??/bar/'
=> foo
echo "foo" | sed -r 's/f??/bar/'
=> baroo

-n标志不会抑制输出,而是抑制模式空间中任何内容的自动输出。如果您使用ps///p标记,那么打印仍会显式发生并产生输出。

例如:

echo "foo" | sed ''
=> foo
echo "foo" | sed -n ''
=> 
echo "foo" | sed -n 'p'
=> foo
echo "foo" | sed -n 's/foo/bar/p'
=> bar

如果您想取消sed的输出,可以将STDOUTSTDERR重定向到/dev/null,如下所示:

sed '<commands>' &>/dev/null

有关sed的简介,请参阅this视频系列。