在 cat 命令中将一行附加到文件?

在 cat 命令中将一行附加到文件?

我可以cat file.txt获取文件的内容,但我还想添加我自己选择的最后一行。

我尝试过管道(cat file.txt ; echo "My final line") |,但只有最后一根管线穿过了管道。我该如何连接管道和最后一根管线?

编辑以澄清一点:我不希望修改文件本身。我知道如果是这种情况,我可以执行echo "My final line" >> file.txt或,echo "My final line" | tee -a file.txt但我只想尝试在此特定命令的上下文中执行附加操作,以便我可以通过管道连接file.txt"My final line"

答案1

您可以利用cat从标准输入读取的能力以及读取多个文件的能力来实现这一点。

~$ cat file.txt
Hello from file.txt

~$ echo "My final line" | cat file.txt -
Hello from file.txt
My final line

您还可以添加一行,例如:

~$ echo "My final line" | cat - file.txt
My final line
Hello from file.txt

请注意,您不限于一行。cat将从 stdin 读取,直到到达 EOF。curl例如,您可以将 的输出传递到 的输出前面或后面cat

~$ curl -s http://perdu.com | cat file.txt -
Hello from file.txt
<html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>

答案2

要将一行附加到文件,您只需使用 shell 附加重定向运算符即可>>(文件将使用标志open(2)附加O_APPEND):

echo 'My final line' >>file.txt

现在,如果你想看法文件内容加上最后一行,我会使用cat两个参数:

  • 首先,你的文件显然是file.txt
  • 第二个参数是您选择的字符串,要将该字符串作为文件名传递(因为cat仅处理文件),您可以利用进程替换,<()它将返回一个文件描述符(/proc/self/fd/<fd_number>)

把它们放在一起:

cat file.txt <(echo 'My final line')

如果您希望对输出进行分页,假设less是您最喜欢的分页器:

less file.txt <(echo 'My final line')

答案3

sed -e '$aMy final line' file.txt

man sed选项-e

-e script, --expression=script
    add the script to the commands to be executed

$匹配最后一行并 a附加字符串。

如果你想永久地将该行附加到文件中,请使用-i

-i[SUFFIX], --in-place[=SUFFIX]
    edit files in place (makes backup if SUFFIX supplied)

将命令更改为

sed -i -e '$aMy final line' file.txt

答案4

这里有很多不错的答案,但就我而言,我只想通过将命令附加到管道末尾来将换行符附加到某些 stdout。这实现了这一点:

$CMD_OR_COMMANDS | cat - <(echo)

为了符合原始示例:

cat file.txt | cat - <(echo "My final line")

这无疑是一种冗长的方式来完成这件事,但关键是这种模式可能更适合您的需求,因为它适用于任何产生标准输出的东西。

相关内容