トップページ > コンテンツ > コンピュータ関連その他 > UNIXコマンド > sed




使い方

■コマンド記載形式

パイプやファイル等で与えられたテキストを1行ずつ読み取り、アドレス部分に記載した条件に合致する場合はコマンド部分の処理を実行する。

sed [オプション] 'アドレス コマンド'

オプション部分 sed処理全体のオプション設定を指定
アドレスコマンド部分 ;区切りにすることで複数個記載可能
アドレス部分 コマンドを実行する対象を絞り込む条件のイメージ
コマンド部分 置換等の具体的処理を記述するイメージ

■オプション部分

e fオプションが無い場合、省略可能。複数個条件を指定する場合等に記載
f パターンを記載したファイルを指定。パターンが複数個有る場合に-eオプションを羅列せずに済む
n sedによる置換結果を出力させない。
nオプションをつけない場合、sedは以下を繰り返すような出力結果となる(※)。
・1行読み込み、コマンド部分内にpがあれば表示。
・1行分のコマンド処理結果を表示
i ファイル名を指定することで上書き保存
c ファイル名を上書きするのでなく、コピーを作成する
r,E 拡張正規表現を使用する

(※)具体例
$ sed 's/aaa/ddd/p'

/*A.txt*/ => /*A.txtの置換後*/    
aaa                   ddd
bbb                  bbb
ccc                   ccc

/*出力結果*/
ddd  <-/aaa/の部分がひっかかった時のpが呼び出された
ddd  <-nオプションをつけてないので、A.txtの置換後を表示
bbb  <-同上
ccc   <-同上

■アドレス部分

数値A A行目
数値A,数値B A行目〜B行目
数値A,数値B! A行目〜B行目以外
/正規表現A/ 正規表現Aが合致する行
/正規表現A/,/正規表現B/ 正規表現Aが合致する行〜正規表現Bが合致する行
記載なし 全行

■コマンド部分

a aの後ろのテキストをアドレス部分の後ろに追加する
i iの後ろのテキストをアドレス部分に挿入する
p 表示する
d 表示しない
s s/置換前文字列/置換後文字列/flag 置換処理を行うコマンド
flagがgの場合 1行の中に置換前文字列を複数見つけた場合も全て置換処理する
flagが数値の場合 1行の中の数値番目の要素に対して処理する
flagがpの場合 置換し終わった物を表示
flagがwの場合 別ファイルに書き出す
置換前文字列を括弧で囲った場合。
/¥(正規表現¥)/&です/
¥(¥)で囲った正規表現を後方参照取得する。後方参照に入る値は&,¥1,¥2
s_置換前文字列_置換後文字列_flag sの1個後ろの文字が区切り文字となる。「http://」等、/を含む文字列を置換したい場合は別の記号等を置換前後の文字列の区切り文字とすると良い。
N 1行分追加の先読みを行う。複数行まとめて処理したい場合に使う。
b ラベル名 ラベル名: で指定した位置までジャンプさせる。コマンド処理をループさせたい場合等に役立つ
t ラベル名 sコマンドが成功したらジャンプ
T ラベル名 sコマンドが失敗したらジャンプ
c c\文字 行まるごとの置換を行う
y y/文字/文字/ 文字単位での置換を行う。trコマンドの方が使い勝手が良いので使用頻度は低め
q 終了

※正規表現では、¥d等のメタ文字使えない点は注意。

コマンド例

■テキスト全体のX回目の置換対象文字のみ置換

こちらのように、ラベルを使うとうまくできる模様。

■対象文字が含まれた行だけ表示(grepチック)

sed -n '/対象文字/p'

■対象文字が含まれた行だけ削除(grep -vチック)

sed  '/対象文字/d'

■置換前の文字列も表示

sed 'p;s/置換前/置換後/'

■置換後の文字列のみ表示

sed -n 's/置換前/置換後/p' または
sed 's/置換前/置換後'

■特定行のみ置換

sed "3,5s/置換前文字列/置換後文字列/g"

■特定文字を含む行のみ置換

sed "/特定文字/s/置換前文字列/置換後文字列/g"

■特定文字の行から特定文字の行の間を表示

sed -n '/開始行の正規表現/,/終了行の正規表現/p'|

■複数行ごとに文字列を置換

2行ごとに4番目の置換対象文字列を置き換える場合
sed -e "N;s/置換前文字列/置換後文字列/4"

最終更新:2019年04月16日 22:16