我想使用sed命令更改文件中的一个(width to be exact)参数。在这种情况下,它是用于运动检测的运动程序中的motion.conf。
我已经为线路替换编写了一个命令,但它无法正常工作,因为我希望它能够正常工作。这是命令:
sudo sed 's/width [0-9]/change/g' /etc/motion/motion.conf
只有在我写[0-9]
时才会选择该行。如果我放置[0-9]+
,则ommand不再起作用。
请告诉我如何使它发挥作用。
由于
答案 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。