将内容重定向到新行下(无需进一步的语法或参数)

将内容重定向到新行下(无需进一步的语法或参数)

我尝试了以下方法将内容附加到文件:

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的语法是我个人使用的最后手段。此外,我不知道有什么方法可以为这里的字符串添加换行符,并且在这个中没有找到这样的方法printfecho文档

我寻求的是一种实用程序,可以自动下降一行,而不需要添加任何参数或语法。我尝试阅读 nix 文本处理实用程序,但没有找到我想要的东西。你知道这样的实用程序吗?

答案1

您不需要cat“以错误的方式”编写该行,这工作得很好(当然,这里字符串中的箭头仍然指向一个奇怪的方向):

$ cat <<< "some text" >> testfile
$ cat testfile
some text

正如评论中提到的,here-string 在末尾添加换行符,而 withprintfecho你使用\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

相关内容