在Linux中的特定行向文件添加文本[重复]
Posted
技术标签:
【中文标题】在Linux中的特定行向文件添加文本[重复]【英文标题】:Add text to file at certain line in Linux [duplicate] 【发布时间】:2013-02-15 22:47:49 【问题描述】:我想添加一个特定的行,比如说avatar
到以MakeFile
开头的文件,avatar
应该添加到文件的第 15 行。
这是向文件添加文本的方法:
echo 'avatar' >> MakeFile.websvc
我认为这是向以 MakeFile 开头的文件添加文本的方法:
echo 'avatar' >> *MakeFile.
但我无法将此行添加到文件的第 15 行。
【问题讨论】:
第二个例子是错误的。您需要遍历文件并分别为每个文件添加一行。如果你想在文件中间添加文本,你需要遍历文件的内容并在你到达正确的位置时插入你的东西。 【参考方案1】:你可以使用sed
来解决这个问题:
sed "15i avatar" Makefile.txt
或使用-i
选项保存对文件所做的更改。
sed -i "15i avatar" Makefile.txt
更改所有以Makefile
开头的文件:
sed "15i avatar" Makefile*
注意:在上面的15
是您感兴趣的放置文本的行。
【讨论】:
头像和行号存入变量怎么办? sed -i "$line_numberi $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/gif(eof)$.=0' MakeFile*
【讨论】:
以上是关于在Linux中的特定行向文件添加文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章