sed :忽略匹配行的起始空格

use*_*746 6 linux sed regular-expression

我想将 httpd 的默认侦听端口替换为 9090。我可以使用下面的方法编辑 httpd.conf 文件中的行

sed -i "/^Listen/c\Listen 9090" /etc/httpd/conf/httpd.conf
Run Code Online (Sandbox Code Playgroud)

但是线

Listen 80
Run Code Online (Sandbox Code Playgroud)

前面可能有空格。

如何忽略此空白以匹配此行?

use*_*ser 8

只允许正则表达式也匹配空格。您可以使用字符组[ \t](匹配空格或制表符)或等效的 POSIX 括号表达式 [:blank:]

因此,/^Listen/变成/^[[:blank:]]*Listen/。(请注意,括号表达式实际上是用双方括号对编写的。)


rus*_*ush 7

通过以下方式更改您的匹配模式,在 liste 之前不捕获空格:

/^\s*Listen/
Run Code Online (Sandbox Code Playgroud)

这将包括所有

Listen ..
    Listen ...
Run Code Online (Sandbox Code Playgroud)

和别的。

  • 您可以将空格放在一个组中并在替换中使用它。例如,`s/^(\s*)Listen(.*)$/\1Listen/`(或类似的东西;在将它用于任何有价值的东西之前先尝试一下)。 (4认同)