使用bash脚本在文件中添加多行

时间:2014-07-14 20:21:20

标签: macos bash sed

使用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。

知道我做错了什么吗?谢谢!

2 个答案:

答案 0 :(得分:2)

好悲伤,只需使用awk。无需担心替换文本中的特殊字符或随机单字符命令和标点符号。

在这种情况下,看起来您只需要在第二行之后打印一些新文本,这样就可以了:

$ cat file
a
b
c

$ insert='absolutely any text you want, including newlines
slashes (/), backslashes (\\), whatever...'

$ awk -v insert="$insert" '{print} NR==2{print insert}' file
a
b
absolutely any text you want, including newlines
slashes (/), backslashes (\), whatever...
c

答案 1 :(得分:0)

按行号来做是不是更容易?如果您知道它是第二行或第n行(如果您是模式匹配,grep将告诉您行号),那么您可以简单地使用sed找到正确的行,然后添加一个新行(或4个新行)。 / p>

cat <<EOF > testfile
one two three
four five six
seven eight nine
EOF

sed -re '2a\hello there' testfile

将输出

one two three
four five six
hello there
seven eight nine