mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

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

[ pc_tips ] [ Linux, sed ]

こんばんは。

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

0. 前提条件

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

1. 実行例

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

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

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

以上。

Comments