bash - 使用 sed 在匹配后追加多行(带有 shell 变量)

标签 bash sed posix

不是 GNU sed。我有一个 makefile 集合,我正在尝试统一修改。在每个 makefile 中,我都有一条注释,告诉我将代码放在哪里。

sed "/MULTI WORD COMMENT/a\
LINE 1\
LINE 2 $stuff $morestuff" "$file" >> "$file"_NEW

我想找到评论,然后在其后附加多行文本。有些行包含我想要扩展的 shell 变量。我所能想到的是,当我想做 shell expansions 时,我需要使用 " 并且要附加的每一行都应该有自己的行。

我收到一条错误消息,告诉我用“\”终止“a”命令,但看起来我已经这样做了。我做错了什么?

输入示例

# MULTI WORD COMMENT
.SUFFIXES: .o .c

输出示例

# MULTI WORD COMMENT
LINE 1
LINE 2 ASDF GASIFJ
.SUFFIXES: .o .c

在本例中,为 stuff=ASDFmorestuff=GASIFJ。这些与我正在使用的 makefile 中的变量名称并不完全不同。

最佳答案

由于您使用双引号,因此需要转义两次,因此请使用:

sed "/MULTI LINE COMMENT/a\\
LINE 1\\
LINE 2 $stuff $morestuff" "$file" >> "$file"_NEW

PS:您的示例输入具有多行注释,但您的命令具有多字注释

关于bash - 使用 sed 在匹配后追加多行(带有 shell 变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31572760/

相关文章:

linux - sed 命令将 'root' @'localhost' 替换为 'root' @'%'

bash - sed 多行删除模式

c - 如何在 Linux 中使用 POSIX pthreads 将整数从文件写入缓冲区?

c - C 中指针类型的 POSIX 限制

windows - cygwin 更新原因 "Error: could not fork child process: Resource temporarily unavailable."

linux - 如何在 Ubuntu 中运行多个 Firefox 实例?

linux - 如何进行多行搜索并用脚本替换?

Linux:在用户已准备好输入名称的文本文件中搜索字符串

bash - 以编程方式在 Heroku 中运行 bash 脚本文件

c - select(2)为什么叫 "synchronous"多路复用?