使用sed在文件之前将文件内容插入文件

时间:2014-10-01 12:25:47

标签: regex sed

我是sed的新手,我正在尝试将一个BFile的内容插入AFile文件中,在一个模式之前(在AFile中)

以后是我尝试过的:

sed -i '/blah Blah/r BFile' AFile:它在AFile模式之后插入了BFile的内容。

sed -i '/blah Blah/i BFile' AFile:在AFile模式之前插入字符串'BFile'。

......嗯......

我意识到这是因为对正则表达式的错误理解或sed:我无法理解/i/r如何在这里工作......我找不到sed --help

中的任何帮助

有人理解我的观点吗?

此致

斯坦

6 个答案:

答案 0 :(得分:8)

这可能适合你(GNU sed):

sed $'/blah Blah/{e cat Bfile\n}' AFile

或:

sed -e 'N;/\n.*blah Blah/{r Bfile' -e '};P;D' AFile

答案 1 :(得分:3)

AFile

的内容
one
two
three
blah Blah
four

BFile

的内容
...b...

运行这些命令

# get line number
$ sed -n '/blah Blah/=' AFile
4

# read file just before that line
$ sed '3r BFile' AFile
one
two
three
...b...
blah Blah
four

答案 2 :(得分:1)

sed&r; s命令不会更改模式空间。文件的内容在当前周期结束时或在读取下一个输入行时打印(info sed),因此以下命令中的N

sed '/blah Blah/ {
r Bfile
N
}' Afile

答案 3 :(得分:0)

sed '/blah Blah/ r BFile;x;1!p;${g;p;}' AFile

缓冲当前行,因此在打印当前行之前读取BFile(实际上是打印下一行)

答案 4 :(得分:0)

只需使用awk:

在匹配的行之前打印Bfile:

awk 'NR==FNR{bfile = bfile $0 RS; next} /blah Blah/{printf "%s", bfile} {print}' Bfile Afile

打印Bfile后:

awk 'NR==FNR{bfile = bfile $0 RS; next} {print} /blah Blah/{printf "%s", bfile}' Bfile Afile

答案 5 :(得分:0)

[在模式之前将文件内容插入另一个文件]

sed -i '/PATTERN/r file1' -e //N file2

[模式之后]

sed -i '/PATTERN/r file1' file2