知道这应该做什么吗?
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>