我有这种现有模式:
ethernet0.generatedAddress = "00:50:56:bf:71:06"
我需要使用sed模式用新的mac地址替换上面表达式中的mac地址。 注意:每次需要替换的mac-address都不相同。
我尝试了这个sed表达式,但没有运气..
sed 's/ethernet0.generatedAddress.*=.*\"([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}/ethernet0.generatedAddress = \"00:16:3e:5e:1d:01'
先谢谢
答案 0 :(得分:2)
模式:
([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
就像这样(刚刚测试过)
sed -r 's/(.*)([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})(.*)/\1\NEW_MAC_ADDRESS\3/g' file.txt
如果要在运行中替换文件
,请另外使用-i
选项
测试文件的内容(file.txt)
something before ethernet0.generatedAddress = "00:50:56:bf:71:06" and something after
答案 1 :(得分:1)
为什么不使用awk
?它提供简单易懂的解决方案。
cat file
some data
ethernet0.generatedAddress = "00:50:56:bf:71:06"
more data
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
搜索ethernet0.generatedAddress
,如果找到,请用#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
或者这个:
{{1}}