regex - 为什么我的 sed 命令有时无法使用 r 标志

标签 regex linux sed

我真的很困惑。

有时这个标志工作正常

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 标志不抑制输出,而是抑制模式空间中任何内容的自动输出。如果您使用 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

参见 this介绍 sed 的视频系列。

关于regex - 为什么我的 sed 命令有时无法使用 r 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471925/

相关文章:

bash - 如何使用 SED 查找和替换目标字符串中的 "/"字符的 URL 字符串?

sql - 如何在SQL中使用正则表达式?

javascript - 验证匹配不能为空

linux - openmpi python 超过3个进程

linux - 修复内核丢弃来自外部网络的数据包

Java 打印编写器环绕

bash - 仅抓取文件所有行中第四个和第七个下划线之间的文本/子字符串

javascript - 我的正则表达式有什么问题?

python - 正则表达式 XML 选择提取元素

c# - 如何从 VS2015 定位 Mono 框架?