2011-11-06 134 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 
相關問題