【问题标题】:Add text to file at certain line in Linux [duplicate]在Linux中的特定行向文件添加文本[重复]
【发布时间】:2013-02-15 22:47:49
【问题描述】:

我想添加一个特定的行,比如说avatar 到以MakeFile 开头的文件,avatar 应该添加到文件的第 15 行。

这是向文件添加文本的方法:

echo 'avatar' >> MakeFile.websvc

我认为这是向以 MakeFile 开头的文件添加文本的方法:

echo 'avatar' >> *MakeFile.

但我无法将此行添加到文件的第 15 行。

【问题讨论】:

  • 第二个例子是错误的。您需要遍历文件并分别为每个文件添加一行。如果你想在文件中间添加文本,你需要遍历文件的内容并在你到达正确的位置时插入你的东西。

标签: linux text-processing


【解决方案1】:

你可以使用sed来解决这个问题:

sed "15i avatar" Makefile.txt

或使用-i 选项保存对文件所做的更改。

sed -i "15i avatar" Makefile.txt

更改所有以Makefile开头的文件:

sed "15i avatar" Makefile*

注意:在上面的15 是您感兴趣的放置文本的行。

【讨论】:

  • 头像和行号存入变量怎么办?
  • sed -i "${line_number}i ${text_to_write}" Makefile.txt
【解决方案2】:

使用 sed :

sed -i '15i\avatar\' Makefile*

-i 选项表示转换发生在原地(例如,当您要处理多个文件时,这很有用)。

另外,在您的问题中,*MakeFile 代表“所有以 MakeFile 结尾的文件”,而“所有以 MakeFile 开头的文件”将表示为 MakeFile*。

【讨论】:

    【解决方案3】:

    如果您需要将字符串和行号选项传递给脚本,请尝试以下操作:

    perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile*
    

    -i编辑输入文件,不要做备份
    $.是行号

    这是基于我对Insert a line at specific line number with sed or awk 的解决方案,其中包含其他几种将选项传递给 Perl 的方法,以及对命令行选项的说明。

    【讨论】:

      【解决方案4】:

      如果您想要更便携的版本,您可以使用ex,它适用于任何 *Nix 系统。 (specified by POSIX.)目前给出的 Sed 命令依赖于 GNU Sed。

      要在当前目录中名称以“Makefile.”开头的每个文件的第 15 行插入仅包含“avatar”的行,请使用:

      for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done
      

      【讨论】:

        【解决方案5】:
        perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*
        

        【讨论】:

          猜你喜欢
          • 2020-10-26
          • 1970-01-01
          • 1970-01-01
          • 2018-07-24
          • 2014-12-28
          • 2018-11-06
          • 1970-01-01
          • 1970-01-01
          • 2013-04-19
          相关资源
          最近更新 更多