1. 概要

このチュートリアルでは、ファイルの最後の文字を削除する方法を学習します。 問題は簡単に見えますが、覚えておくべきことがいくつかあります。 この問題を解決するための複数の方法を見ていきます。

2. サンプルファイル

使用するサンプルファイルの内容を見てみましょう。 これは、catコマンドを使用して実行できます。

$ cat sample.txt
This is a file
This file has two lines

サンプルファイルsample.txtには2行のテキストがあります。

3. ファイルの最後の文字を削除する

ここで、ファイルの最後の文字を削除する問題のいくつかの顕著な解決策を見てみましょう。

3.1. sedコマンドの使用

コマンドsedは、挿入、削除、検索、検索、置換などのファイル操作を実行します。

sedを使用してファイルの最後の文字を切り刻む方法を見てみましょう。

$ sed '$ s/.$//' sample.txt
This is a file
This file has two line

上記のsedコマンドは、正規表現置換を利用してファイルの最後の文字を削除します。 ここでは、「。」 (ドット)は任意の文字を指し、$はファイル内の最後の行を指します。 したがって、。$は最後の文字のみをスラッシュします。

s/.$//関数呼び出しはファイルの最後の行で実行されます。 最後の文字を空の文字列に置き換えます。 このようにして、ファイルの最後の文字を完全に削除します。

コマンドsedは、ファイル全体の読み取りから始まります。 したがって、このアプローチは大きなファイルには多くの時間がかかります。

上記のsedコマンドは、実際のファイルを変更しません。

sedコマンドのオプション-iは、実際のsample.txtファイルを変更します。

$ sed -i '$ s/.$//' sample.txt
$ cat sample.txt
This is a file
This file has two line

ただし、実際のファイルがシンボリックリンクの場合、上記のコマンドは機能しません。

sed コマンドは、デフォルトですべての Linux システムにインストールされているため、文字を削除するためによく使用されます。

3.2. truncateコマンドの使用

コマンドtruncateは、ファイルを指定されたサイズに縮小または展開します。

これを使用して、ファイルの最後の文字を削除できます。

$ truncate -s -1 sample.txt 
$ cat sample.txt
This is a file
This file has two line

オプション-s-1を指定したtruncateコマンドは、ファイルの最後の文字 s を削除することにより、ファイルのサイズを1つ減らします。

コマンドtruncateは、大きなファイルを処理する場合でも、ほとんど時間がかかりません。

3.3. exコマンドの使用

コマンドexは、Linuxテキストエディタを指します。 exは拡張を意味します。

exを使用してファイルの最後の文字を削除する方法を見てみましょう。

$ printf '%s\n' '$' 's/.$//' wq | ex sample.txt
$ cat sample.txt
This is a file
This file has two line

コマンドprintfは、ファイルの内容を%s文字列フォーマット指定子で出力します。 \ n は、新しい行に出力するエスケープシーケンスです。

ここでは、「。」 (ドット)は任意の文字を指し、$はファイル内の最後の行を示します。 したがって、。$は最後の文字のみを削除します。

s/.$//関数呼び出しがファイルの最後の行に適用されます。 最後の文字を空の文字列に置き換えます。 このようにして、ファイルの最後の文字を削除します。

コマンドwqは、テキストエディタを保存して終了します。

コマンドexは、ファイルsample.txtを更新します。

3.4. awkコマンドの使用

コマンドawkは、テキスト処理とデータ抽出を実行します。

awkを使用してファイルの最後の文字を削除する方法を見てみましょう。

$awk '{a[NR]=$0} END {for (j=1; j<NR; j++) print a[j];sub(/.$/,"",a[NR]);print a[NR]}' sample.txt
This is a file
This file has two line

ここで、NRawkの組み込み変数です。 sample.txtファイルで処理されているレコードの総数を保持します。

関数subは、awkに組み込まれている文字列関数です。 最後の文字sを空の文字列“”に置き換えます。  「。」 (ドット)は任意の文字を指し、$はファイル内の最後の行を指定します。

したがって、上記の awk コマンドは、ファイルの内容全体を配列に保持します。 次に、ファイルの最後の行の最後の文字を削除します。 最後に、コンソールに印刷します。

4. 結論

この記事では、 sed truncate ex awkなどのさまざまなコマンドを使用してファイルの最後の文字を削除する方法を学びました。 ]。