テキスト処理

sed

テキストのストリーム編集ツール。パターンにマッチした行の置換・削除・抽出をファイルを開かずに行う

SYNTAX sed [options] 'script' [file...]

主なオプション

オプション説明
-iファイルを直接書き換える(インプレース編集)
-i.bakバックアップを作成してから書き換え
-n自動出力を抑制(p コマンドと組み合わせて使う)
-E / -r拡張正規表現を使用(+ ? () `

基本コマンド('...' 内に書くもの)

コマンド説明
s/old/new/各行の最初のマッチを置換
s/old/new/g各行のすべてのマッチを置換
s/old/new/i大文字小文字を無視して置換
/pattern/dパターンにマッチした行を削除
/pattern/pパターンにマッチした行を出力(-n と組み合わせ)
NdN行目を削除
N,MdN行目〜M行目を削除

使用例

# "foo" を "bar" に置換して表示(ファイルは変更しない)
sed 's/foo/bar/' file.txt
# 行内のすべての "foo" を "bar" に置換
sed 's/foo/bar/g' file.txt
# ファイルを直接書き換え
sed -i 's/localhost/example.com/g' config.txt
# バックアップを作りつつ書き換え(元ファイルは .bak として残る)
sed -i.bak 's/localhost/example.com/g' config.txt
# コメント行(# で始まる行)を削除
sed '/^#/d' config.txt
# 空行を削除
sed '/^$/d' file.txt
# 1行目を削除(CSVのヘッダ行をスキップ)
sed '1d' data.csv
# 3〜5行目のみ表示
sed -n '3,5p' file.txt
# パターンにマッチした行のみ表示
sed -n '/ERROR/p' app.log
# 各行の行頭に文字列を追加
sed 's/^/PREFIX: /' file.txt
# 各行の末尾に文字列を追加
sed 's/$/ ;/' file.txt

アドレス指定

# 2行目のみ置換
sed '2s/foo/bar/' file.txt

# 10行目以降を削除
sed '10,$d' file.txt

# パターンにマッチした行のみ置換
sed '/DEBUG/s/debug/DEBUG/g' app.log

キャプチャグループ(-E 使用)

# 日付形式を変換(YYYY-MM-DD → DD/MM/YYYY)
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/' dates.txt