1. ホーム
  2. linux

[解決済み] unixでファイルの最後の文字を削除するにはどうすればよいですか?

2023-04-05 11:48:26

質問

ある任意の複数行のテキストファイルがあるとします。

sometext
moretext
lastline

テキストファイルを無効にすることなく、ファイルの最後の文字(e、改行やNULLではない)だけを削除するにはどうしたらよいでしょうか。

どのように解決するのですか?

よりシンプルな方法 ( 標準出力に出力する に出力し、入力ファイルを更新しない)。

sed '$ s/.$//' somefile

  • $ は最後の入力行のみにマッチするSedアドレスであるため、以下の関数呼び出しが発生します( s/.$// )が最後の行だけで実行されるようにします。

  • s/.$// の最後の文字を置き換えます(この例では 最後の ) の最後の文字を空文字列に置き換えます。(改行の前) を削除します。

    . はその行の任意の文字にマッチし、それに続く $ で囲むと、マッチは行末に固定されます。 $ を使っていることに注意してください。 正規表現 は概念的には関連していますが、技術的には以前の $ をSed アドレス .

  • 標準入力での例(Bash、Ksh、Zshを想定しています)。

      $ sed '$ s/.$//' <<< $'line one\nline two'
      line one
      line tw
    
    

への 入力ファイルを更新する も更新します (入力ファイルがシンボリックリンクの場合は使用しないでください)。

sed -i '$ s/.$//' somefile

注意

  • macOSでは -i '' ではなく、単に -i に関連する落とし穴の概要については、こちらをご覧ください。 -i の下半分を参照してください。 この回答 .
  • 非常に大きな入力ファイルを処理する必要があり、パフォーマンスとディスク使用量が懸念される場合 を使っているのなら GNU ユーティリティ(Linux)を使用している場合は ImHere's helpful answer .