我是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
有人理解我的观点吗?
此致
斯坦
答案 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