Bash:将字符串添加到文件末尾而不换行

Posted

技术标签:

【中文标题】Bash:将字符串添加到文件末尾而不换行【英文标题】:Bash: add string to the end of the file without line break 【发布时间】:2012-02-03 02:18:06 【问题描述】:

如何在不换行的情况下将字符串添加到文件末尾?

例如,如果我使用 >> 它将添加到文件末尾并带有换行符:

cat list.txt
yourText1
root@host-37:/# echo yourText2 >> list.txt
root@host-37:/# cat list.txt
yourText1
yourText2

我想在 yourText1 之后添加 yourText2

root@host-37:/# cat list.txt
yourText1yourText2

【问题讨论】:

echo -n 似乎是您要查找的命令。 【参考方案1】:

以上答案对我不起作用。发布一个 Python 实现,以防万一有人觉得它有用。

python -c "txtfile = '/my/file.txt' ; f = open(txtfile, 'r') ; d = f.read().strip() ; f.close() ; d = d + 'the data to append' ; open(txtfile, 'w').write(d)"

【讨论】:

【参考方案2】:

只需改用printf,因为它不会默认打印新行:

printf "final line" >> file

测试

让我们创建一个文件,然后添加一个没有尾随新行的额外行。注意我使用cat -vet 来查看新行。

$ seq 2 > file
$ cat -vet file
1$
2$
$ printf "the end" >> file
$ cat -vet file
1$
2$
the end

【讨论】:

由于一个非常模糊的原因,echo -n 在从 Ansible shell 运行时不起作用。你的回答让我很开心。【参考方案3】:
sed '$s/$/yourText2/' list.txt > _list.txt_ && mv -- _list.txt_ list.txt

如果你的 sed 实现支持 -i 选项,你可以使用:

sed -i.bck '$s/$/yourText2/' list.txt

使用第二种解决方案,您也将拥有一个备份(第一种,您需要手动进行)。

或者:

ex -sc 's/$/yourText2/|w|q' list.txt 

perl -i.bck -pe's/$/yourText2/ if eof' list.txt

【讨论】:

感谢 ex/vim 版本这么简单! 注意:如果您的文本文件来自 Mac/Dos,这将无法识别 EoL 字符。您需要先在文件上运行 dos2unix。【参考方案4】:

可以使用echo的-n参数。像这样:

$ touch a.txt
$ echo -n "A" >> a.txt
$ echo -n "B" >> a.txt
$ echo -n "C" >> a.txt
$ cat a.txt
ABC

编辑:啊哈,您已经有一个包含字符串和换行符的文件。好吧,无论如何我都会把它留在这里,也许我们对某人有用。

【讨论】:

非常正确,先生,我会这样做。另外,如果您不是从文件开始,那么>> 将使用您提供的任何扩展名或根本不使用它,例如我最喜欢的代码行:$ cat ~/.ssh/id_rsa.pub | ssh itsme@nopasswordcheckneeded.com 'cat >> ~/.ssh/authorized_keys' 然后下一行是$ ssh-add -K 和walla!每次我需要远程访问那台机器时,不再提示密码

以上是关于Bash:将字符串添加到文件末尾而不换行的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 文件末尾添加换行符

正常shell bash脚本文件最后一行末尾是否应该添加换行符?(应该另起一行)

python语句中的 end=' ' 的作用

初学python,小记一

在 BASH 脚本中使用“awk”将列添加到 CSV 文件的末尾

滚动 UITextView 而不换行