我尝试了以下方法将内容附加到文件:
printf "\nsource ~/script.sh" >> /etc/bash.bashrc
echo -e "\nsource ~/script.sh" >> /etc/bash.bashrc
cat >> "/etc/bash.bashrc" <<< "source ~/script.sh"
这三种方式都有效。我发现这里cat
的字符串不太舒服,因为需要从末尾读取它(在cat
将其附加[end]
到之后[start]
)。
所有方法都不会自动断行,并且and\n
的语法是我个人使用的最后手段。此外,我不知道有什么方法可以为这里的字符串添加换行符,并且在这个中没有找到这样的方法printf
echo
文档。
我寻求的是一种实用程序,可以自动下降一行,而不需要添加任何参数或语法。我尝试阅读 nix 文本处理实用程序,但没有找到我想要的东西。你知道这样的实用程序吗?
答案1
您不需要cat
“以错误的方式”编写该行,这工作得很好(当然,这里字符串中的箭头仍然指向一个奇怪的方向):
$ cat <<< "some text" >> testfile
$ cat testfile
some text
正如评论中提到的,here-string 在末尾添加换行符,而 withprintf
和echo
你使用\n
在前面字符串的。
echo
通常会添加尾部换行符,就像这里的字符串一样,所以如果您只需要这个,echo
应该没问题(而且它是大多数 shell 中的内置函数。)
所有命令的工作方式与换行符略有不同
cat >> file <<< "string" # newline at end
printf "\nstring" >> file # newline at beginning
echo -e "\nstring" >> file # newline at beginning and at the end
坦率地说,我认为最好习惯这种\n
表示法,但如果您不喜欢它,这里总是有文档(这里包括前导换行符和尾随换行符):
cat >> file <<EOF
some text
EOF
答案2
如果文件确实以换行符结尾(所有正确的 POSIX 文本文件都必须如此),则无需添加换行符前您添加到文件中的文本。
确保文件以换行符结尾的一种方法是执行以下命令:
$ sed -i -e '$a\' file
这将添加一个换行符仅有的如果文件缺少换行符。
然后,您可以添加所需的文本并在后面添加换行符,以确保文本文件仍以换行符结尾:
a="source ~/script.sh"
echo -e "$a" >> file # with trailing new line
printf "$a\n" >> file # with trailing new line
<<< "$a" cat >> file # with trailing new line
请注意,cat 命令的顺序已与您发布的顺序不同。
如果您需要一个额外的引导新行,使用:
a="source ~/script.sh"
{ echo; echo -e "$a" ; } >>file
echo -e "\n$a" >>file
printf '%b' "\n$a\n" >>file
a=$'\nsource ~/script.sh'
<<<"$a" cat >>file
如果您想要带有 cat 选项的附加换行符,请使用:
a=$'\nsource ~/script.sh\n'
<<<"$a" cat >>file
这将添加二尾随新行,一行来自变量$a
,一行(不可避免)来自<<<
(此处字符串)。
答案3
正因为它是可能的,所以这里有一种append
在 python 中发出命令的方法:
#!/usr/bin/env python
import sys
with open(sys.argv[2],"a") as f:
f.write(sys.argv[1] + "\n")
并且如此工作。
$ echo "first line" > input.txt
$ ./append "Hello Unix.se" input.txt
$ cat input.txt
first line
Hello Unix.se