Regex 如何使用sed将现有的mac add替换为新的mac地址
我有一个现有的模式:Regex 如何使用sed将现有的mac add替换为新的mac地址,regex,macos,bash,unix,sed,Regex,Macos,Bash,Unix,Sed,我有一个现有的模式: ethernet0.generatedAddress = "00:50:56:bf:71:06" 我需要用一个使用sed模式的新mac地址替换上面表达式中的mac地址。 注意:每次需要更换的mac地址都不相同 我试过这个sed表达式,但没有成功 sed 's/ethernet0.generatedAddress.*=.*\"([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}/ethernet0.generatedAddress = \"00:
ethernet0.generatedAddress = "00:50:56:bf:71:06"
我需要用一个使用sed模式的新mac地址替换上面表达式中的mac地址。
注意:每次需要更换的mac地址都不相同
我试过这个sed表达式,但没有成功
sed 's/ethernet0.generatedAddress.*=.*\"([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}/ethernet0.generatedAddress = \"00:16:3e:5e:1d:01'
提前感谢模式:
([a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2}:[a-z0-9]{2})
或者如果使用大写字母,则使用下面的一个
([a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2})
替换:
new_mac_address // for instance 00:f6:a0:ff:f1:06
旁注:正如下面注释中的指针一样,如果需要,可以使用转义括号和大括号,或者使用-r
选项
使用sed
会是这样(刚刚测试过)
如果要动态替换文件,请另外使用-i
选项
测试文件的内容(file.txt)
为什么不使用
awk
?它提供了简单易懂的解决方案
cat file
some data
ethernet0.generatedAddress = "00:50:56:bf:71:06"
more data
它搜索ethernet0.generatedAddress,如果找到,用新的mac替换由“
分隔的字段#2
如果一个额外的空间没有问题,这将更干净:
awk -v m="$mac" -F\" '/ethernet0.generatedAddress/ {$2=FS m FS}1' file
some data
ethernet0.generatedAddress = "ab:11:23:55:11:cc"
more data
或者这个:
awk -v m="\"$mac\"" -F\" '/ethernet0.generatedAddress/ {$2=m}1' file
我认为你也应该在正则表达式中包含大写字符。对于
sed
括号和大括号是特殊的,你应该将它们转义。@Birei谢谢;)我不确定它们是否被使用,但没有用。sed's/ethernet0.generatedAddress.*.*”([a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-9]{2}:[a-zA-Z0-Z0-9}])/eth ernet0.generatedAddress=\“00:16:3e:5e:1d:01'mac>temp.junk sed:unmatched'/'@user3363550开头的*
是什么内容。我没有添加它;)@hex4949我删除了它。*..sed匹配失败了:(
mac="ab:11:23:55:11:cc"
awk -v m="$mac" -F' "|"' '/ethernet0.generatedAddress/ {$2="\""m"\""}1' file
some data
ethernet0.generatedAddress = "ab:11:23:55:11:cc"
more data
awk -v m="$mac" -F\" '/ethernet0.generatedAddress/ {$2=FS m FS}1' file
some data
ethernet0.generatedAddress = "ab:11:23:55:11:cc"
more data
awk -v m="\"$mac\"" -F\" '/ethernet0.generatedAddress/ {$2=m}1' file