在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中的特定行向文件添加文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在bash中将文本附加到具有模式匹配名称的文件[重复]

Google表格中的粗体特定文本[重复]

在python中删除文本文件的特定模式[重复]

从文本文件中删除每个单独列中的重复项

如果在树中嵌套其他值,则获取文本文件(yaml)中的键值[重复]

如何使用jquery知道是不是存在具有特定ID的div [重复]