使用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。
知道我做错了什么吗?谢谢!
答案 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