空でない最後の行のテキストを置き換える方法は?

空でない最後の行のテキストを置き換える方法は?

ファイルの最後のテキスト行を見つけて、最後のカンマを削除したいと思います。私この質問はすでにリクエストされています。しかし、答えを受けた後、私の質問は十分に具体的ではないことに気づきました。

このsedコマンドはファイルの最後の行に移動して操作を実行します。私の場合は、末尾のカンマを削除したいと思います。

sed -i '$ s/",/"/g' file.txt

だからこれ:

blah blah blah,
blah blah blah,
blah blah blah,

...次のようになります。

blah blah blah,
blah blah blah,
blah blah blah

しかし、テキストの最後の行の後に空白行がある場合は機能しません。ファイルから。

私はテキストの最後の行を取得する方法を探していましたが、私が理解して適用できるものが見つかりませんでした。また、すべての末尾の空白行を削除する方法を見つけ、次のコマンドを見つけました。

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' *.txt

しかし、それは私にとってはうまくいきません(コマンドラインに私のファイルの内容を出力するようです)。とにかくこれはエレガントではありません。次の空行を削除したくありません。テキストを含む最後の行を識別し、それに応じてアクションを実行する方が良いでしょう。

最後の行からカンマを削除する方法テキスト1つのディレクトリに複数のファイルがありますか?

ベストアンサー1

大容量ファイルの場合は、より速いGuruの回答を使用してください。しかし、小さなファイル(25行未満)では、これが少し速いことがわかりました(GNU tacがあると仮定)。

tac file | awk '!/^[[:blank:]]*$/{i++;if(i==1){sub(",$","")}}1' | tac

おすすめ記事