如何使用sed用新的mac地址替换现有的mac add

时间:2014-08-10 09:47:39

标签: regex macos bash unix sed

我有这种现有模式:

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'

先谢谢

2 个答案:

答案 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

Demo

答案 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}}