我有一个文本文件,例如File1.txt,我想用另一个文本文件中的新行替换它的几行,例如File2.txt。 File1.txt的格式如下所示它有指针的开始和结束。
START
line 1
line 2
line 3
line 4
line 5
END
我想将第1行更改为第5行,其中包含File2.txt中可用的行。 File1.txt和File2.txt中的行数不相等。 File2.txt可能有更多或更少的行,如File1.txt。
我需要某人的意见。感谢期待
答案 0 :(得分:1)
如果要保留的 File1.txt 部分是固定的, 您只需要打印第二个文件并包含这些部分:
printf 'BEGIN\n\n%s\n\nEND\n' "$(<File2.txt)"
如果不是这种情况(用模式替换START / END 与您要保留的部分匹配):
awk 'NR == FNR {
f2 = f2 ? f2 RS $0 : $0
next
}
/START|END/ || !NF {
print; next
}
NF && !c++ {
print f2
}' File2.txt File1.txt
答案 1 :(得分:1)
这个GNU sed one liner可能有效:
sed -re '/^START/,/^END/{/^START/{p;r File2.txt' -e '};/^END/p;d}' File1.txt
这会在File2.txt
和START
之间插入END
,但不会在line 1
之后和line 2
之前保留空行
这会尝试保留空行:
sed -re '/^START/,/^END/{//!{/^$/{p;d};x;/./{x;d};x;h;r File2.txt' -e ';d};x;s/.*//;x}' File1.txt