Bash:找到匹配的文本并替换下一行

时间:2018-03-28 10:57:19

标签: bash awk sed pattern-matching

警告:我之前在stackoverflow上看到过这类问题。我搜索了很多。遵循解决方案,但无法解决问题。

我有一个变量 $ NEW_FILE ,其值为 的什么(./位置/ file1的)] 当你回音$ NEW_FILE

我有一个文件test1.txt,其中包含:

你好,世界!

这不起作用

我不知道关于sed和awk的事情

现在我想搜索单词 - 工作 并在$ NEW_FILE中包含的后面添加一个新行 所以期望的输出是:

你好,世界!

这不起作用

什么(./位置/ file1的)]

我不知道关于sed和awk的事情

如何使用sed或awk在bash中实现此目标?

这是我试过的: awk'/ working / {print; print $ NEW_FILE; next} 1'test1.txt

这会产生输出:

你好,世界!

这不起作用

$ NEW_FILE

我不知道关于sed和awk的事情

有人可以帮我这个吗?

我认为我们还必须考虑NEW_FILE变量中的前向和后向斜杠。

1 个答案:

答案 0 :(得分:2)

您的NEW_FILE可能是bash变量,因此不是awk中的变量。所以,要么让bash进行扩展:

awk '/working/ { print; print "'$NEW_FILE'"; next}1' test1.txt

或从命令行传递/设置变量:

awk -v NEW_FILE="$NEW_FILE" '/working/ { print; print NEW_FILE; next}1' test1.txt