在同一行内的变量前面附加文本 - bash

nic*_*v06 1 bash awk sed append

我有这个例子。文本

> 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 
Run Code Online (Sandbox Code Playgroud)

我有这个命令: srxa_host_list=$(echo example.text | awk '{print $3}' | sed 's/-.*//')

输出:

echo $srxa_host_list
xa1
Run Code Online (Sandbox Code Playgroud)

我需要什么:在“xa1”之前附加sr文本,而不创建新的代码行。

echo $srxa_host_list
srxa1
Run Code Online (Sandbox Code Playgroud)

Rav*_*h13 5

第一个解决方案:根据您显示的示例,请尝试以下awk程序。我们可以用一个awk程序来完成这一切。

awk -F'[ -]' '{print "sr"$3}'  Input_file
Run Code Online (Sandbox Code Playgroud)

解释:简单的解释是,将-所有行的字段分隔符设置为空格。在主程序中打印sr字符串,后跟当前行的第三个字段,如输出所示。



第二种解决方案:使用sub方法awk尝试以下程序。

awk '{sub(/-.*/,"");print "sr"$3}' Input_file
Run Code Online (Sandbox Code Playgroud)

说明:使用sub函数从该行的第一次出现到最后一行替换-为 NULL,然后打印 str 字符串,后跟第三个字段。



第三种解决方案:使用sed启用-EERE)选项请尝试以下程序。

sed -E 's/^[^ ]* +[^ ]* +([^-]*)-.*/sr\1/' Input_file
Run Code Online (Sandbox Code Playgroud)

说明:使用sed's-E选项启用 ERE(扩展正则表达式)。然后在主程序中从头开始匹配^[^ ]* +[^ ]* +,然后是一个捕获组,其中匹配之前的所有内容-,第一个捕获组-.*替换它sr