带有五个斜杠的 sed 命令

带有五个斜杠的 sed 命令

知道这应该做什么吗?

grep -lr . | xargs sed -i '' -e '/ifcfg-wlan0/!s/wlan0/<name of the device>/g'

我从未见过sed带有五个斜杠的命令,也找不到任何有关它的文档。

答案1

将其视为一个命令和一个条件。它的意思是“替换所有出现的内容,wlan0除非<name of the device>该行匹配ifcfg-wlan0”。或者,也许更准确地说,它的意思是“如果此行匹配ifcfg-wlan0,则不要替换wlan0<name of the device>”,因此,通过扩展,请在任何不匹配的行上替换它ifcfg-wlan0

这是许多可以理解的“地址”之一sed,特别是正则表达式地址,在man sed我的 GNU 中记录sed为:

/正则表达式/

匹配与正则表达式 regexp 匹配的行。匹配是在当前模式空间上进行的,可以使用诸如 之类的命令进行修改s///

如果您还知道!否定下一个语句,则可以将其转换/ifcfg-wlan0/!s/wlan0/<name of the device>/g'为以下伪代码:

unless /ifcfg-wlan0/ {
   s/wlan0/<name of the device>/g
}

最后,它正在运行,为了清晰起见,添加了一些空格:

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n'
wlan0
ifcfg-wlan0
wlan0

$ printf 'wlan0\nifcfg-wlan0\nwlan0\n' | 
    sed -e '/ifcfg-wlan0/ ! s/wlan0/<name of the device>/g'
<name of the device>
ifcfg-wlan0
<name of the device>

相关内容