我有这个example。text
> cat example.text
10.10.44.11 10.10.44.20 xa1-Y xa2-Y xb1-Y xb2-Y xc1-Y xc2-Y xd1-Y xd2-Y
,我有这个命令:srxa_host_list=$(echo example.text | awk '{print $3}' | sed 's/-.*//')
输出:
echo $srxa_host_list
xa1
我需要什么:在"xa1"前添加sr文本无需创建新的代码行
echo $srxa_host_list
srxa1
解决方案1:
请使用您所显示的样品,尝试以下awk
程序。我们可以用一个awk
程序完成所有这些。
awk -F'[ -]' '{print "sr"$3}' Input_file
解释:简单的解释是,将字段分隔符设置为空格,并将所有行设置为-
。在主程序中打印sr
字符串,后跟当前行的第三个字段,如所示输出。
解决方案2:使用awk
程序的sub
方法尝试以下程序。
awk '{sub(/-.*/,"");print "sr"$3}' Input_file
解释:使用sub
函数从第一次出现-
到最后一行替换为NULL,然后打印字符串后跟第三个字段。
3的解决方案:使用sed
和-E
(启用ERE)选项,请尝试以下程序。
sed -E 's/^[^ ]* +[^ ]* +([^-]*)-.*/sr1/' Input_file
解释:使用sed
的-E
选项启用ERE(扩展正则表达式)。然后在主程序中,从^[^ ]* +[^ ]* +
开始匹配一个捕获组,其中匹配-
之前的所有内容,然后匹配-.*
,并用sr
和第一个捕获组替换它。
使用sed
$ srxa_host_list="sr$(sed 's/[^-]* ([^-]*).*/1/' example.text)"
$ echo "$srxa_host_list"
srxa1
如果您需要第三个字段的值保持默认字段分隔符,您也可以在-
上分割并将第一部分附加到sr
awk '{split($3, a, "-");print "sr"a[1]}' example.text
输出srxa1