我正在寻找一种优雅的方法来替换ASCII-file1中的一行行,其中file2的所有行都以第二行开头。 file1中要替换的行封装在空行nr.2和nr.3中。
file1中块的第一行和最后一行的编号是针对一堆文件修复的,但是需要更通用的解决方案。
文件1:
first
text
block
#blank line
second textblock
#blank line
third
text
block
#blank line
file2的:
first line
all
the
other
lines
替换后的预期文件1:
first
text
block
#blank line
second textblock
#blank line
all
the
other
lines
#blank line
答案 0 :(得分:3)
awk
的一种方式:
$ match="second textblock"
$ awk 'NR==FNR&&!p;$0~m{print p;p=1};NR>FNR&&FNR>1' m="$match" file1 file2
first
text
block
#blank line
second textblock
all #blank line
the
other
lines
#blank line
答案 1 :(得分:3)
sed '2,$!d' file2 > file3
sed -f script.sed file1
script.sed
/second textblock/{
n
r file3
q
}
- 输出是:
first text block second textblock all the other lines
答案 2 :(得分:2)
这个问题是关于按段落阅读文件:
awk 'NR==3 {while (getline < "file2") print; next} 1' RS='' ORS='\n\n' file1
或
perl -00 -pe '$.==3 and $_=`cat file2`."\n"' file1