その行にテキストを追加するには、ファイルの最後の行から改行文字を削除するにはどうすればよいですか?

その行にテキストを追加するには、ファイルの最後の行から改行文字を削除するにはどうすればよいですか?

次のファイルがあるとしますfile

$ cat file
Hello
Welcome to
Unix

and Linuxファイルの最後の行末に追加したいです。これにより、echo " and Linux" >> file新しい行が追加されます。しかし、私は最後の行が欲しいUnix and Linux

したがって、この問題を解決するために、ファイルの末尾にある改行文字を削除したいと思います。では、その行にテキストを追加できるように、ファイルの末尾にある改行文字をどのように削除しますか?

ベストアンサー1

最後の行にテキストを追加するには、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

おすすめ記事