将字符串附加到与模式匹配的文件中的行

时间:2014-03-20 20:46:39

标签: linux string

我有一个内容类似

的文件

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

2 个答案:

答案 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地址。