次のファイルがあるとします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