テキスト処理
基本コマンド(
キャプチャグループ(
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 と組み合わせ) |
Nd | N行目を削除 |
N,Md | N行目〜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