2011-11-06 203 views
0

我有一个文本文件,例如File1.txt,我想用另一个文本文件中可用的新行替换它的几行,例如File2.txt。 File1.txt的格式如下它有指针开始和结束。使用sed或awk替换另一个文件的文本文件的行

START 

line 1 
line 2 
line 3 
line 4 
line 5 

END 

我想用File2.txt中的可用行将第1行更改为第5行。 File1.txt和File2.txt中的行数不相等。 File2.txt可能具有更多或更少的行,如File1.txt。

我需要某人的帮助。在期待

+0

你想之前保留的空行第1行和第5行之后?第1行和第5行之间是否有空行? – potong

回答

1

感谢如果FILE1.TXT要保留的部分是固定的, 你只需要打印的第二个文件,并包括部分:

printf 'BEGIN\n\n%s\n\nEND\n' "$(<File2.txt)" 

如果是这样的情况并非如此(替代开始/结束与匹配要保留的部分,该模式 ):

awk 'NR == FNR { 
    f2 = f2 ? f2 RS $0 : $0 
    next 
    } 
/START|END/ || !NF { 
    print; next 
    } 
NF && !c++ { 
    print f2 
    }' File2.txt File1.txt 
1

这GNU使用sed一个衬垫可能工作:

sed -re '/^START/,/^END/{/^START/{p;r File2.txt' -e '};/^END/p;d}' File1.txt 

这将插入和ENDFile2.txt之间STARTline 1后不保留空行和前line 2

这种尝试保留空行:

sed -re '/^START/,/^END/{//!{/^$/{p;d};x;/./{x;d};x;h;r File2.txt' -e ';d};x;s/.*//;x}' File1.txt 
相关问题