使用sed或awk用另一个文件的文本替换文本文件的行

时间:2011-11-06 15:12:19

标签: database sed awk

我有一个文本文件,例如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。

我需要某人的意见。感谢期待

2 个答案:

答案 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.txtSTART之间插入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