【问题标题】:How do I insert a line at a specific row in multiple files on Unix?如何在 Unix 上的多个文件的特定行中插入一行?
【发布时间】:2010-11-17 00:04:04
【问题描述】:

我需要在目录中数百个文件的第二行插入一行带有特定文本的行(从而将文件中的其他行向下移动)。关于如何做到这一点的任何快速 Unix 提示?

【问题讨论】:

    标签: perl unix sed


    【解决方案1】:
    sed -i -e '2iYour line here' /dir/*
    

    请注意,sed -i 语义因 Unix 风格而异,因此请检查您的 man sed。这是为 GNU 风格编写的。

    【讨论】:

      【解决方案2】:
      perl -pi -we'print "extra line\n" if $. == 3; close ARGV if eof' files
      

      close(ARGV)是每个文件开头重新启动行计数器$.所必需的;默认情况下,它计算文件中的行数。

      【讨论】:

      • 您不认为值得使用-i.bak 来保护您免于因输入错误而丢失大量数据吗? (想象一下你忘记了-p。)
      • @Telemachus:在做整个目录时,我更喜欢先复制整个目录(例如 cp -a dir{,.save});然后我可以在需要时将其 mv 回来。
      【解决方案3】:

      这是AWK 的用法,而不是sed

      for i in $(<list_of_files)
      do
           awk '{if (FNR!=2) print $0; 
                 else { print "new line"; print $0}}' $i > ${i}.tmp;
           mv ${i}.tmp $i;
      done
      

      【讨论】:

        【解决方案4】:
        ls | xargs --replace=foo perl -i -ne 'print; print "second line text\n" unless $x++;' foo
        

        【讨论】:

        • 我投票 从不 推荐 perl -i 没有备份:perl -i.bak。这很简单,一旦确定您的编辑没有出错,您就可以轻松删除备份。
        猜你喜欢
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多