在Linux中的某一行添加文本到文件

时间:2013-03-01 12:20:41

标签: linux text-processing

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

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

echo 'avatar' >> MakeFile.websvc

这就是如何将文本添加到以MakeFile开头的文件中我认为:

echo 'avatar' >> *MakeFile.

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

5 个答案:

答案 0 :(得分:64)

您可以使用sed来解决此问题:

sed "15i avatar" Makefile.txt

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

sed -i "15i avatar" Makefile.txt

更改从开始Makefile开始的所有文件:

sed "15i avatar" Makefile*

注意:上面15是您放置文字的兴趣点。

答案 1 :(得分:3)

使用sed:

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

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

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

答案 2 :(得分:2)

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

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的方法,以及命令行选项的解释。

答案 3 :(得分:2)

如果您想要更便携的版本,可以使用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

答案 4 :(得分:0)

perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*