我需要一个 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
。