sedコマンドの主な機能:追加・削除・置換・表示
sed(Stream Editor)は、標準入力またはファイルからテキストを読み込み、指定された操作を実行して出力する強力なストリームエディタです。特に「検索」「追加」「削除」「置換」の4つの基本操作が頻繁に使用されます。
主なオプション
-n:デフォルトの出力を抑制し、明示的に指定した行のみを出力します。-r:拡張正規表現を使用可能にします(例:|,+など)。-i:ファイルを直接編集します。-i.bak:編集前に元のファイルを指定名(例: .bak)でバックアップします。
準備:テストデータの作成
以下のような内容のstaff.txtファイルを使用して説明を進めます。
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
表示(p)— 特定の行を出力
pコマンドはマッチした行を出力します。-nと組み合わせることで、該当行のみを表示できます。
第5行だけを表示
sed -n '5p' staff.txt
# 出力:
# 105,feixue,CIO
1行目から5行目までを表示
sed -n '1,5p' staff.txt
小文字を含む行をフィルタリング(grep相当)
sed -n '/[a-z]/p' staff.txt
複数パターンにマッチする行を抽出
sed -rn '/oldboy|yy/p' staff.txt
# 出力:
# 101,oldboy,CEO
# 104,yy,CFO
範囲指定:特定の行から別の行までを出力
sed -n '/102/,/105/p' staff.txt
# 102で始まる行から105で始まる行までを出力
追加(a/i)— 行の挿入と付加
aは指定行の後ろに、iは前に内容を追加します。
3行目の後に新規レコードを一時的に追加
sed '3a119,SB,UFO' staff.txt
# 3行目「103,Alex,COO」の直後に追加される
変更をファイルに直接保存(永続化)
sed -i '3a119,SB,UFO' staff.txt
1行目の前に内容を挿入
sed -i '1i100,founder,Chairman' staff.txt
バックアップを残しつつ編集
sed -i.bak '4a120,chenxing,XOO' staff.txt
# staff.txt.bak が作成され、元の内容が保持される
削除(d)— 不要な行の除去
dコマンドで指定した行を削除できます。
4行目を削除
sed '4d' staff.txt
空行をすべて削除
sed '/^$/d' staff.txt
空行またはコメント行(#で始まる行)を除外
sed -r '/^(#|$)/d' /etc/ssh/sshd_config
置換(s)— 文字列の変更
形式:s/パターン/置換文字列/フラグ
g:行内すべての一致を置換(グローバル)数字:n番目の一致のみを置換(例:s/foo/bar/2)&:マッチした全体を参照\1, \2...:キャプチャグループを後方参照
CFOをCMOに置換
sed 's/CFO/CMO/g' staff.txt
正規表現で名前の部分だけを括弧で囲んで再利用
sed -r 's/(10[1-5]),([^,]+)/\1,\U\2/' staff.txt
# 名前部分を大文字に変換(\Uは拡張機能による)