arifisik Asked: 2019-05-26 02:46:46 +0800 CST2019-05-26 02:46:46 +0800 CST 2019-05-26 02:46:46 +0800 CST awk 和 sed 在每个相关行的行尾追加 772 我想做一些线操作,但被困在逐行处理中。我的文件如下所示: 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 linux bash 1 个回答 Voted Best Answer karlsebal 2019-05-26T03:12:38+08:002019-05-26T03:12:38+08:00 两者都不需要,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 也许您应该使用if. 我强烈建议您查看一些 awk 资源(例如此处或此处)
两者都不需要,
sed
而且awk
,您可以使用一个工具。实现您的目标的代码awk
可能是/<expression>/
搜索正则表达式,该{<code>}
部分告诉 awk 如何处理该记录。在这种特殊情况下,该函数会gsub
替换第二列中所有出现的“AB”——如果你只想替换第一次出现的使用sub()
,但关于正则表达式,我想你可以在这里使用一个或另一个来获得相同的结果——结果随后打印。在您的问题中,不清楚要编辑的行之间是否有任何行可以不加更改地打印。如果是这种情况,您需要像这样进行匹配和编辑后跳转到下一条记录:
也许您应该使用
if
. 我强烈建议您查看一些 awk 资源(例如此处或此处)