Shell-Script

如何從文件的最後一行刪除換行符以便向該行添加文本?

  • January 31, 2021

假設我有一個名為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

引用自:https://unix.stackexchange.com/questions/254644