我想做一些行操作,但被困在逐行处理中。我的文件如下所示:
10.10.10.10 ABtest
10.10.10.11 ABprod
我想根据行末的字符串在每一行附加一个字符串。
我的方法是使用 awk 测试ABtest
行尾的字符串,然后使用 sed 将其转换ABtest
为test
。之后,我想将输出附加到每个相关行。
我想要输出如下内容:
10.10.10.10 ABtest test
10.10.10.11 ABprod prod
答案1
不需要两者,sed
你awk
可以使用一个工具。实现目标的代码awk
可能是
awk '
/AB/ {
printf $0
gsub("^AB", "", $2)
printf " %s\n", $2
}
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT
/<expression>/
搜索正则表达式,该{<code>}
部分告诉 awk 如何处理该记录。在此特定情况下,该函数gsub
将替换第二列中出现的所有“AB”——如果您只想替换第一次出现,请使用sub()
,但关于正则表达式,我猜您可以使用其中一个或另一个,结果相同——随后打印结果。
您的问题中没有明确指出在要编辑的行之间是否有任何行可以不加修改地打印。如果是这种情况,您需要在匹配和编辑后跳转到下一条记录,如下所示:
awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT