我想添加一个特定的行,假设avatar
为以MakeFile
开头的文件,avatar
应该添加到文件的第15行。
这是向文件添加文本的方法:
echo 'avatar' >> MakeFile.websvc
这就是如何将文本添加到以MakeFile开头的文件中我认为:
echo 'avatar' >> *MakeFile.
但我无法将此行添加到文件的第15行。
答案 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*