GNU/Linux >> Linux の 問題 >  >> Linux

ファイルの最後の文字である改行を削除するにはどうすればよいですか?

perl -pe 'chomp if eof' filename >filename2

または、その場でファイルを編集するには:

perl -pi -e 'chomp if eof' filename

これは、私が見た awk Web サイトで「perl blasphemy」と説明されていました。

しかし、テストではうまくいきました。


シェル コマンドの置換により末尾の改行文字が削除されるという事実を利用できます :

bash、ksh、zsh で動作する単純な形式:

printf %s "$(< in.txt)" > out.txt

ポータブル (POSIX 準拠) の代替 (わずかに効率が悪い):

printf %s "$(cat in.txt)" > out.txt

注:

  • If in.txt 複数で終わる 改行文字、コマンド置換は all を削除します それらの . (末尾の改行以外の空白文字は削除されません。)
  • このアプローチは入力ファイル全体をメモリに読み込むため 、小さいファイルにのみ推奨されます。
  • printf %s 出力に改行が追加されないようにします (非標準の echo -n に代わる POSIX 準拠の代替手段です)。; http://pubs.opengroup.org/onlinepubs/009696799/utilities/echo.html および https://unix.stackexchange.com/a/65819 を参照してください)

他の回答へのガイド :

  • Perl の場合 利用可能です。受け入れられた回答を求めてください - シンプルでメモリ効率が良い (入力ファイル全体を一度に読み取るわけではありません)。

  • それ以外の場合は、ghostdog74 の Awk を検討してください 答え - あいまいですが、メモリ効率も良い; より読みやすいもの (POSIX 準拠) は:

  • awk 'NR > 1 { print prev } { prev=$0 } END { ORS=""; print }' in.txt

  • END で最終行を処理できるように、印刷が 1 行遅れます。 ブロック、末尾の \n なしで出力されます 出力レコード区切り文字 (OFS の設定による) ) を空の文字列にします。

  • 詳細でありながら高速で堅牢なソリューションが必要な場合、実際にその場で編集 (元のファイルを置き換える一時ファイルを作成するのではなく)、jrockway の Perl スクリプト を検討してください。 .


Linux
  1. Linuxでファイルをシンボリックリンクするにはどうすればよいですか?

  2. 前の bash コマンドの引数を思い出すにはどうすればよいですか?

  3. sed を使用してファイルの最後の n 行を削除する方法

  1. tr コマンド - 文字列 \n を実際の改行 (\n) に置き換える方法

  2. ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

  3. ls で実際のハード リンクを確認するにはどうすればよいですか?

  1. Linuxを使用して、ファイルの内容をパラメーターとして実行可能ファイルに渡すにはどうすればよいですか?

  2. ファイルを gunzip して .gz ファイルを保持するにはどうすればよいですか?

  3. バイナリ ファイルを実行できないというエラーを解決するにはどうすればよいですか?