我真的很困惑。
有时这个标志工作正常
sed -e 's/dd//gp' 文件
有时我需要使用
sed -re 's/dd//gp' 文件
有时候是这样
sed -ren 's/dd//gp' 文件
有时
sed -n 's/dd//gp' 文件
刚才我试图抑制输出,但我一直在使用 -ren
标志
上周对其他正则表达式有效
现在我不得不使用 -n
来抑制输出
组合有什么区别
我有这个命令
sed -n 's/\/\*\*//gp' file
它适用于 -n
但不适用于 -en
最佳答案
您可以使用 man sed
来确定 sed
的各种标志的用途。
-e
标志只有在为 sed
指定多个引用 block 时才需要。
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
标志不抑制输出,而是抑制模式空间中任何内容的自动输出。如果您使用 p
或 s///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
的输出,你可以将 STDOUT
和 STDERR
重定向到 /dev/null
像这样:
sed '<commands>' &>/dev/null
参见 this介绍 sed
的视频系列。
关于regex - 为什么我的 sed 命令有时无法使用 r 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471925/