我想使用sed命令来更改文件中的一个参数(确切地说是宽度)。在这种情况下,它是用于运动检测运动程序中的motion.conf。
我已经写了行替换的命令,但它不工作,因为我希望它工作。这是命令:
sudo sed 's/width [0-9]/change/g' /etc/motion/motion.conf仅当我编写了[0-9]时,行的选择才起作用。如果我放置[0-9]+,命令将不再起作用。
你能告诉我怎么用吗?
谢谢
发布于 2016-01-05 19:45:09
您所要做的就是避开+
$ 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的正则表达式语法。
发布于 2016-01-05 20:48:37
请注意,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。
https://stackoverflow.com/questions/34610866
复制相似问题