【问题标题】:replacing lines of a text file with text of another file using sed or awk使用 sed 或 awk 将文本文件的行替换为另一个文件的文本
【发布时间】:2011-11-06 15:12:18
【问题描述】:

我有一个文本文件,例如 File1.txt,我想用另一个文本文件中可用的新行替换它的几行,例如 File2.txt。 File1.txt 的格式如下 有指针 start 和 end。

START

line 1
line 2
line 3 
line 4
line 5

END

我想用 File2.txt 中可用的行将第 1 行更改为第 5 行。 File1.txt 和 File2.txt 中的行数不相等。 File2.txt 的行数可能与 File1.txt 相同。

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

【问题讨论】:

  • 您要保留第 1 行之前和第 5 行之后的空行吗?第1行和第5行之间会有空行吗?

标签: database sed awk


【解决方案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

【讨论】:

    【解决方案2】:

    这个 GNU sed one liner 可能会工作:

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

    这会在STARTEND 之间插入File2.txt,但不会在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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 2022-01-26
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      相关资源
      最近更新 更多