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

Append text in front of variable within the same line - bash

我有这个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 }' | sed 's/-.*//')

输出:

echo $srxa_host_list
xa1

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

echo $srxa_host_list
srxa1

第一个解决方案: 使用您显示的示例,请尝试遵循 awk 程序。我们可以用一个 awk 程序完成所有这些。

awk -F'[ -]' '{print "sr"}'  Input_file

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



第二个解决方案:使用awk程序的sub方法尝试下面的程序。

awk '{sub(/-.*/,"");print "sr"}' Input_file

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



第三个解决方案: 使用 sed-E(启用 ERE)选项请尝试以下程序。

sed -E 's/^[^ ]* +[^ ]* +([^-]*)-.*/sr/' Input_file

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

使用sed

$ srxa_host_list="sr$(sed 's/[^-]* \([^-]*\).*//' example.text)"
$ echo "$srxa_host_list"
srxa1

如果您需要保留默认字段分隔符的第 3 个字段的值,您还可以拆分 - 并将第一部分附加到 sr

awk '{split(, a, "-");print "sr"a[1]}' example.text

输出

srxa1