【问题标题】:inserting text into a specific line将文本插入特定行
【发布时间】:2018-03-01 13:40:33
【问题描述】:

我有一个文本文件,我希望使用 Bash 将文本插入到特定的行中。

要插入的文本例如是 !comment: http://www.test.com 到第 5 行

!aaaa
!bbbb
!cccc
!dddd
!eeee
!ffff

成为,

!aaaa
!bbbb
!cccc
!dddd
!comment: http://www.test.com
!eeee
!ffff

【问题讨论】:

  • 您是否要针对大量文件执行此操作?还是单个文件一次?

标签: bash


【解决方案1】:
sed '4a\
!comment: http://www.test.com' file.txt > result.txt

i 在当前行之前插入,a 在该行之后追加。

【讨论】:

  • 4a 是什么意思?
  • 我很好奇为什么这不起作用(在 \ 之后没有新行):sed '4a\!comment: http://www.test.com' file.txt > result.txt 我收到以下错误:extra characters after \ at the end of a command
  • 看起来 sed 需要一个明确的换行符或\'$'\n。参考 - stackoverflow.com/questions/8991275/…
  • 谢谢!一种以合规方式在 XML 文件中插入许可证标头的好方法(在 XML 序言之前不应出现任何内容),例如 gist.github.com/berezovskyi/467320e305871498d0acdc32c6f269a2
【解决方案2】:

你也可以使用 awk

$ awk 'NR==5{$0="!comment: http://www.test.com\n"$0}1' file
!aaaa
!bbbb
!cccc
!dddd
!comment: http://www.test.com
!eeee
!ffff

【讨论】:

    【解决方案3】:

    使用 man 1 ed(将整个文件读入内存并在没有先前备份的情况下执行就地文件编辑):

    # cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed
    line='!comment: http://www.test.com'
    #printf '%s\n' H '/!eeee/i' "$line" . wq | ed -s file
    printf '%s\n' H 5i "$line" . wq | ed -s file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2017-04-23
      • 2019-11-21
      • 2013-12-14
      • 1970-01-01
      相关资源
      最近更新 更多