我需要一個 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
表示連接,在這種情況下它有兩個參數:-
表示標準輸入,因此連接檔案的第一部分是透過管道傳輸到它的任何內容(在本例中為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
。