使用 shell 脚本在大型文件的最后一行后添加 ''

使用 shell 脚本在大型文件的最后一行后添加 ''

我需要一个 SED 或 AWK 命令来查找文件中的最后一行并添加</pre>到其中。

例如:

LINELINELINE

更改至:

LINELINELINE</pre>

答案1

您还可以使用所谓的复合命令。这是一个命令列表,对于复合命令之外的任何操作,shell 都将其视为单个命令。

是的,这有点像递归定义;举个例子更容易理解。

例如,要用<pre>and包围文件</pre>,您可以使用如下命令:

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

如果您没有临时文件,而是想要用其他内容包围某些命令的输出,则可以注入该命令而不是cat

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

这一切都是通过将重定向应用于整个复合命令的输出(而不是仅仅其部分)来实现的。

当然,这不符合sed要求awk,但对于这种任务来说,使用这些工具是有点小题大做。

答案2

这个怎么样:

echo "</pre>" >> /path/to/the/file

或者一开始有点棘手,您需要使用不同的文件进行输出。

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

cat表示连接,在本例中它有两个参数:表示-stdin,因此连接文件的第一部分是通过管道传输的内容(在本例中为echo)。第二个参数是要添加到前面的文件。连接的文件随后输出到newfile

答案3

使用(GNU)sed(根据问题中的标签):

$ sed -i -e '$a\</pre>' file.in

这会添加</pre>一条带有 的线file.in

或者:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

这将添加</pre>到的最后一行file.in

相关内容