用行号替换来自其他文件的行

时间:2013-06-18 11:23:14

标签: regex perl sed awk pattern-matching

我正在寻找一种优雅的方法来替换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

3 个答案:

答案 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)

GNU sed

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