Shell-Script
如何從文件的最後一行刪除換行符以便向該行添加文本?
假設我有一個名為
file
:$ cat file Hello Welcome to Unix
我想
and Linux
在文件最後一行的末尾添加。如果我這樣做echo " and Linux" >> file
將被添加到一個新行。但我想要最後一行Unix and Linux
所以,為了解決這個問題,我想在文件末尾刪除換行符。因此,如何刪除文件末尾的換行符以便將文本添加到該行?
如果您只想在最後一行添加文本,那麼使用 sed 非常簡單。將
$
(行尾的模式匹配)替換為您要添加的文本,僅在範圍內的行$
(即最後一行)上。sed '$ s/$/ and Linux/' <file >file.new && mv file.new file
在 Linux 上可以縮短為
sed -i '$ s/$/ and Linux/' file
如果您想刪除文件中的最後一個字節,Linux(更準確地說是 GNU coreutils)提供了該
truncate
命令,這使得這非常容易。truncate -s -1 file
一種 POSIX 方法是使用
dd
. 首先確定文件長度,然後將其截斷為少一個字節。length=$(wc -c <file) dd if=/dev/null of=file obs="$((length-1))" seek=1
請注意,這兩個都無條件地截斷文件的最後一個字節。您可能需要先檢查它是否是換行符:
length=$(wc -c <file) if [ "$length" -ne 0 ] && [ -z "$(tail -c -1 <file)" ]; then # The file ends with a newline or null dd if=/dev/null of=file obs="$((length-1))" seek=1 fi