【发布时间】:2014-09-04 21:13:18
【问题描述】:
使用 bash 脚本,我试图在文件中插入一行(最终会有 4 个额外的行,一个接一个)。
我正在尝试实现 iiSeymour 对线程的回答:
Insert lines in a file starting from a specific line
我认为这与 dgibbs 在他自己的帖子中发表的评论相同:
Bash: Inserting a line in a file at a specific location
我要插入新文本的那一行很长,所以我先把它保存在一个变量中:
field1=$(head -2 file847script0.xml | tail -1)
我要插入的文字是:
insert='newtext123'
运行时:
sed -i".bak" "s/$field1/$field1\n$insert/" file847script0.xml
我得到错误:
sed: 1: "s/<ImageAnnotation xmln ...": bad flag in substitute command: 'c'
我也尝试过关注这个话题
sed throws 'bad flag in substitute command'
但命令
sed -i".bak" "s/\/$field1/$field1\n$insert/" file847script0.xml
仍然给我同样的错误:
sed: 1: "s/\/<ImageAnnotation xm ...": bad flag in substitute command: 'c'
我使用的是 Mac OS X 10.5。
知道我做错了什么吗?谢谢!
【问题讨论】:
-
我怀疑插入的字段文本破坏了 sed 模式匹配语法,如果其中有一个“/”(如果它是 HTML,也可能有),那么它会破坏。您可以尝试其他模式匹配字符,例如:
sed "s|$field...|..." ... -
命令 sed -i".bak" "s|$field1|$field1\n$insert|" file847script0.xml 插入该行,但不将 \n 识别为新行。我该如何解决?谢谢!