Linux - sed で最終行が特定の文字列の場合のみ行削除!

Updated:


※この記事は8年以上前に投稿されたもので、情報が古い可能性があります。

Linux の sed コマンドで、「特定のディレクトリ内の全てのテキストファイルに対して、最終行に特定の文字列を含んでいる場合のみその行を削除する」方法についてに備忘録です。

0. 前提条件Permalink

  • 今回は LMDE2 (Linux Mint Debian Edition 2) での作業を想定。

1. 実行例Permalink

以下は、カレントディレクトリ内の拡張子が “md” である全ファイルの最終行が --- である場合にその行を削除する例。

$ find *.md | xargs sed -i '${/^---$/d;}'
  • find *.md は、カレントディレクトリ内の拡張子が “md” のファイルを検索するコマンド。
    find . -name "*.md" でもよいだろう。但し、サブディレクトリが存在する場合は、それらの対象となる)
  • | は、前の処理の標準出力を次の処理に引き渡すパイプ処理。
  • xargs は、前の処理から引き渡された標準出力のそれぞれを次の処理の引数として渡すコマンド。
  • sed -i は、 sed コマンドで書き換えた内容を元のファイルに上書き保存する。
  • '${/^---$/d;}' の最初の $ は、最終行を表す。
  • '${/^---$/d;}'/^---$/d; は、行頭から行末が --- なら削除する。
  • '${/^---$/d;}' で、最終行の行頭から行末が --- なら削除する。

あるディレクトリ内の大量のテキストファイルを一括で変換したい事案が発生したために、その際の作業を記録しておいた次第です。

以上。





 

Sponsored Link

 

Comments