awk在不删除文件中的其他内容的情况下进行文件更改

use*_*029 0 bash awk

我正在使用以下代码来修改文件的内容.

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file
Run Code Online (Sandbox Code Playgroud)

我发现只有这个命令输出(到屏幕)只有我告诉它的文件的更改.

我已经尝试修改命令将更改写回文件.

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file  > tmp && mv tmp file. 
Run Code Online (Sandbox Code Playgroud)

然而,这会产生不必要的副作用,即删除awk未被告知要处理的文件中的其他所有内容.我如何使用awk进行这些更改,输出更改并输入回文件而不删除我需要的文件中的其他所有内容?我是否正在使用正确的解决方案,还是需要尝试其他方法?

注意:我使用的是旧版本的awk,它不支持inplace mods,我们无法轻松更新.

Ed *_*ton 5

只需移动print<condition> { <action> }块的外部,以便无条件执行试试这个:

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; $0 = $1 " text I am inserting after command " s } 1' file > tmp && mv tmp file
Run Code Online (Sandbox Code Playgroud)

我不明白你试图用那个循环做什么因为它没有意义所以我只是把它留下来.如果你发布一些简洁,可测试,样本输入和预期输出,你也会得到帮助.

我有一点灵感,这可能是你想要做的:

awk '$1 ~ /command/ { $1 = $1 " text I am inserting after command" } 1' file > tmp && mv tmp file
Run Code Online (Sandbox Code Playgroud)

如果不编辑您的问题以包括输入/​​输出.