Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用sed将现有的mac add替换为新的mac地址_Regex_Macos_Bash_Unix_Sed - Fatal编程技术网

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