【问题标题】:Using sed to append multiple lines (with shell variables) after match匹配后使用 sed 追加多行(带有 shell 变量)
【发布时间】:2015-07-22 19:52:39
【问题描述】:

不是 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=ASDF 和 morestuff=GASIFJ。这些与我正在使用的 makefile 中的变量名称并不完全不同。

【问题讨论】:

  • 显示示例输入以及该示例输入所需的输出。

标签: bash sed posix


【解决方案1】:

由于你使用双引号,你需要转义两次,所以使用:

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

PS:您的示例输入有MULTI LINE COMMENT,但您的命令有MULTI WORD COMMENT

【讨论】:

  • 请注意,如果$stuff 或$morestuff 本身包含换行符,仍然存在问题。然后,OP 可能会更好地将额外信息放入文件中,并使用r 在主输入文件的正确位置从其文件中读取额外信息。
  • 是的,我同意这一点。 $stuff 和 $morestuff 应该是没有换行符的简单字符串。
  • 固定评论示例。幸运的是,这些变量只是模块的名称,因此其中没有换行符。脚本现在正在运行,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2022-01-13
  • 2013-09-30
  • 1970-01-01
  • 2010-10-20
  • 2015-10-03
相关资源
最近更新 更多