我有一个内容类似
的文件FILE.TXT
561 8c:7b:9d:37:0c:ce
546 00:19:55:17:df:f4
345 f0:c1:f1:69:5e:e6
在shell脚本中,
var_mac = 00:19:55:17:df:f4 [some mac]
和var_mac
val_mac = "store"
我想在 File.txt 中找到var_mac
,并将val_mac
附加到与var_mac
匹配的行的末尾。
即
561 8c:7b:9d:37:0c:ce
546 00:19:55:17:df:f4 store
345 f0:c1:f1:69:5e:e6
答案 0 :(得分:1)
将它们放在一个文件中,称之为shell脚本。
var_mac="00:19:55:17:df:f4"
val_mac="store"
sed "/$var_mac/ s/$/ $val_mac/" File.txt
561 8c:7b:9d:37:0c:ce
546 00:19:55:17:df:f4 store
345 f0:c1:f1:69:5e:e6
如果您发现它符合您的要求,请添加标志-i以便在文件中进行更改。
答案 1 :(得分:0)
perl \
-i.bak \
-ne 'chomp;
$_ .= " $ENV{val_mac}" if m/^\d+ (\S+)/ && $1 eq $ENV{var_mac};
print "$_\n";' \
File.txt
-i.bak
会导致perl对输入文件进行就地操作,但会在File.txt.bak
中保留备份副本。
-ne
表示"将以下内容视为在输入中的每一行上运行的程序"
perl脚本的第一行和最后一行将刷新换行符。
$_ .= " $ENV{val_mac}"
将环境变量中的值附加到行尾。
if m/^\d+ (\S+)/ && $1 eq $ENV{var_mac}
检查第二列是否存在并匹配var_mac
环境变量中的mac地址。