sedコマンド入門

sedコマンドは、標準入力やファイル入力における文字列の抽出や変換を強力に行う。複数行にまたがったパターンマッチなど、grepコマンドよりも複雑な検索もできる。たいていのLinuxならインストール済みのはず。


はじめに

sedコマンドでは、下記「オプション・コマンド・アドレス」の3点を駆使して文字列の抽出・変換を行う。

上記コマンドやアドレスからなる一連のコードをsedスクリプトと表現すると、全体の書式はこうなる。

sed オプション 'sedスクリプト' ファイルや標準入力

この全体像と、加えて密接に絡むパターンスペースの仕組みに無頓着のまま「とにかく動けばいい」の精神でコピペするとハマる。


sedコマンドの基本

  1. sedコマンドの基本書式
  2. sedスクリプトを引用符で囲む
  3. パターンスペースで処理
  4. 標準出力がデフォルト
  5. スクリプト末尾の段階の標準出力を止める--quietオプション
  6. ファイル上書き--in-placeオプション
  7. 一度に複数のスクリプトを使う場合
  8. 複数ファイル入力を別個に扱う--separateオプション

アドレスとコマンドの基本

  1. sedスクリプトのアドレスとコマンド
  2. 入力はアドレスに関係なくパターンスペースにまずコピーされる
  3. 行指定アドレス
  4. 正規表現アドレス
  5. 拡張正規表現を使う--regexp-extended
  6. アドレスの入れ子とコマンドのグループ化

コマンド一覧

まずはこの辺から。必ずパターンスペースとアドレスの関係を理解してから。

つづいてこの辺り。

さらに複雑な条件や分岐を使うなら、

ホールドスペース

ラベル


ちょっと複雑なやりたいこと別

  1. 日本語文章途中の不要な改行を取り除く。
  2. 入れ子もあるブロックの終了を検出する。
  3. 複数行を通して一つ目の漢字だけにルビを振る。
  4. 特定のセクションをすべて抽出する。

GNU sed(4.2.2や4.4)(CentOS7やUbuntu18.04の確認時バージョン)で動作確認している。