utte

sed テキストを行ごとに置換・削除・抽出する

sed [オプション] 'スクリプト' [ファイル...]

試してみる

主なオプション

-n自動で行を表示しない(p コマンドと組み合わせる)
-e スクリプトスクリプトを追加する。複数回指定できる
-i[拡張子]ファイルを直接書き換える。拡張子を付けるとバックアップを残す
-E拡張正規表現を使う(-r も同じ)
-f ファイルスクリプトをファイルから読む

解説

基本の形

sed は、入力を1行ずつ読み、スクリプトに従って加工して出力します。元のファイルは、-i を付けない限り変わりません。いちばん使うのは置換で、s/探す文字/置き換える文字/ と書きます。

置換のフラグ

何も付けないと、1行の中で最初に見つかった1か所だけを置き換えます。末尾に g を付けると、その行のすべてを置き換えます。i を付けると大文字と小文字を区別しません。区切りは / 以外でも、s#/usr#/opt# のように使えます。パスを扱うときに便利です。

アドレス(対象の行)

コマンドの前に行を指定できます。3d は3行目、2,4d は2〜4行目、/正規表現/d は一致した行を削除します。$ は最終行です。

主なコマンド

d は削除、p は表示、s は置換です。p は自動出力と重なって2回表示されるため、-n と組み合わせて使います。

正規表現

標準では基本正規表現で、+ や | や () の前にバックスラッシュが必要です。-E を付けると、そのまま書けます。置換後の \1 は、括弧で囲んだ部分への参照で、& は一致した全体です。

-i の注意

-i は元に戻せません。不安なときは -i.bak のようにバックアップを残します。

このコマンドを使う問題

  1. アクセスログから最も多いIPアドレスを調べる
  2. viで設定ファイルの値を書き換えて保存する

関連するコマンド

LinuC 101の出題範囲