我想添加一个特定的行,假设avatar
以文件开头MakeFile
并且avatar
应该添加到文件的第 15 行的文件。
这是向文件添加文本的方法:
echo 'avatar' >> MakeFile.websvc
这就是我认为如何向以 MakeFile 开头的文件添加文本的方法:
echo 'avatar' >> *MakeFile.
但我无法将此行添加到文件的第 15 行。
我想添加一个特定的行,假设avatar
以文件开头MakeFile
并且avatar
应该添加到文件的第 15 行的文件。
这是向文件添加文本的方法:
echo 'avatar' >> MakeFile.websvc
这就是我认为如何向以 MakeFile 开头的文件添加文本的方法:
echo 'avatar' >> *MakeFile.
但我无法将此行添加到文件的第 15 行。
你可以使用sed
来解决这个问题:
sed "15i avatar" Makefile.txt
或使用-i
选项保存对文件所做的更改。
sed -i "15i avatar" Makefile.txt
要更改以 start 开头的所有文件Makefile
:
sed "15i avatar" Makefile*
注意:在上面15
是您感兴趣的放置文本的行。
使用 sed :
sed -i '15i\avatar\' Makefile*
其中 -i 选项表示就地发生转换(例如,当您要处理多个文件时,这很有用)。
此外,在您的问题中,*MakeFile 代表“所有以 MakeFile 结尾的文件”,而“所有以 MakeFile 开头的文件”将表示为 MakeFile*。
如果您需要将字符串和行号选项传递给脚本,请尝试以下操作:
perl -i -slpe 'print $s if $. == $n; $. = 0 if eof' -- -n=15 -s="avatar" Makefile*
-i
编辑输入文件,不做备份复制
$.
是行号
这是基于我使用 sed 或 awk 在特定行号处插入一行的解决方案,其中包含其他几种将选项传递给 Perl 的方法,以及对命令行选项的解释。
如果你想要一个更便携的版本,你可以使用ex
,它可以在任何*Nix 系统上工作。(它由 POSIX 指定。)目前给出的 Sed 命令依赖于 GNU Sed。
要在当前目录中名称以“Makefile.”开头的每个文件的第 15 行插入只包含“avatar”的行,请使用:
for f in MakeFile.*; do printf '%s\n' 15i 'avatar' . x | ex "$f"; done
perl -pi -e 'if($.==14){s/\n/\navatar\n/g}if(eof){$.=0}' MakeFile*