sed命令中的正则表达式

时间:2016-01-05 11:40:15

标签: regex bash sed

我想使用sed命令更改文件中的一个(width to be exact)参数。在这种情况下,它是用于运动检测的运动程序中的motion.conf。

我已经为线路替换编写了一个命令,但它无法正常工作,因为我希望它能够正常工作。这是命令:

sudo sed 's/width [0-9]/change/g' /etc/motion/motion.conf

只有在我写[0-9]时才会选择该行。如果我放置[0-9]+,则ommand不再起作用。

请告诉我如何使它发挥作用。

由于

2 个答案:

答案 0 :(得分:3)

您需要做的只是逃避+

$ cat a
xxx width 0 hallo
xxx width 12 hallo
$ sed 's/width [0-9]\+/change/g' a
xxx change hallo
xxx change hallo

您可以找到GNU sed here的正则表达式语法。

答案 1 :(得分:2)

请注意,sed默认使用POSIX BRE(基本正则表达式)语法。在POSIX规范+中不存在,但许多Linux实现已添加它。要获得更便携的模式,您可以写:

sed 's/width [0-9][0-9]*/change/g'

sed 's/width [0-9]\{1,\}/change/g'

但某些旧版本不支持花括号量词。

您还可以将正则表达式语法切换为支持+量词的ERE(扩展正则表达式),并且不需要转义:

sed -r 's/width [0-9]+/change/g'

-r选项可能会有所不同(例如:-E),具体取决于您的sed版本。)

您可以查看这些语法here