#################################################################### # sed に関するメモ #################################################################### ======================================================================= 基本的な例 ======================================================================= ■基本形 sed 'ed コマンドのリスト' ファイル名 入力行は一行ずつ処理される 行を戻ることはできない 入力ファイルの内容は変更しない 入力ファイルを指定しなければ,標準入力が入力して利用される 出力は標準出力へ ■置換:'UNIX' → 'UNIX(TM)' sed 's/UNIX/UNIX(TM)/' foo.txt > bar.txt #一行に一回だけ sed 's/UNIX/UNIX(TM)/g' foo.txt > bar.txt #g オプションで何回でも sed 's/UNIX/&(TM)/g' foo.txt > bar.txt #同上 & を使った ■条件にマッチする行だけで置換 sed '/./s/UNIX/UNIX(TM)/g' foo.txt > bar.txt (空行以外で処理する: /./ は空行以外にマッチする) ■条件にマッチしない行だけで置換 sed '/^$/!s/UNIX/UNIX(TM)/g' (空行以外で処理する:/^$/ は空行にマッチするから) ■指定行の表示 sed -n '/UNIX/p' (UNIX を含む行だけ表示:p コマンドは印刷, -n オプションは標準の出力の抑制) sed '/UNIX/q' (UNIX を含む行まで表示:q コマンドは終了) ■指定行の削除 sed '/UNIX/d' (UNIX を含む行を出力しない:d は削除コマンド) sed -n '/UNIX/!p' (上と同じだが,違う方法) ■表示する行の範囲の指定 sed -n '20,30p' # 20行から30行までを表示 # *,* は ed のコマンドのアドレスの指定である sed '1,10d' # 1行から10行まで出力しない sed '1,/^$/d' # 最初の空白行まで表示しない sed -n '/^$/,/^end/p' # 空行から end で始まる行まで表示 sed '$d' # 最終行を表示しない ■複数のファイルに書き出す $ sed -n '/pat/w file1 > /pat/!w file2' foo.txt # /pat/ にマッチすれば file1, そうでなければ file2 に書き出す sed 's/UNIX/UNIX(TM)/gw u.out' foo.txt > output.txt #置換の結果全体を output.txt に書き出し,置換が行われた行だけ(結果) #が u.out に書き出される ======================================================================= sed 詳細 ======================================================================= ■ -n オプション デフォルトの出力を抑制する (デフォルトではすべてのパターンスペースを標準出力に出力する) ■ -f オプション スクリプトをファイルから読み込む ex) sed -f scriptfile < input.txt > output.txt ■ sed のコマンドの基本形 [アドレス] コマンド [引数] アドレスは以下のような形式 a,b a 行から b 行まで a a 行 a, b には行数そのものを指定しても良いし,正規表現を使用しても良い。 正規表現を使用した場合,最初にその RE にマッチする行がアドレスとし て使用される。 アドレスが指定されなければ,コマンドはデフォルトの行に対して作用を 及ぼす。sed では全ての行に対して処理が行われると思っていいだろう。 コマンドは 1 文字 \n が改行文字のエスケープシーケンスとして利用できる。 ■全コマンドリスト ■コメント # # 以降はコメントとして扱われる ■追加 a\ 行の追加(複数行追加するときにはテキストの行末に \ が必要) ■挿入 i\ 挿入(複数行追加するときにはテキストの行末に \ が必要) ■置換 c\ 行の置換(複数行追加するときにはテキストの行末に \ が必要) s/RE/replacement/フラグ 置換 フラグ -------------------------------------------------- 整数 n n 番目の発生を置換 g 重ならない全ての例を置換 P パターンスペースの先頭セグメントから 最初の復帰改行までを標準出力に出力する w ファイル名 置換が行われた場合,ファイルにパターン スペースを追加する 置換文字列中の & は正規表現に一致する文字列に置き換 えられる y/pattern/replacement/flags 文字ごとの置換 (/usr/bin/tr) ■削除 d 行の削除 D 先頭セグメントから最初の改行まで削除 ■入力 r ファイル名 ファイルの内容を読み込む n パターンスペースを入力の次の行で置換 N 入力の次の行をパターンスペースに追加し,改行文字を 埋め込む ('\n' で改行として認識されるのはここで埋め込まれた改 行文字だけである) ■出力 p パターンスペースを標準出力に出力 P パターンスペースの先頭セグメントから最初の改行まで を標準出力に出力 l 明白な形式でパターンスペースを標準出力に一覧表示する = 現在の行番号を 1 行として標準出力に出力 (タブ文字などは対応するエスケープシーケンスとして 表示され,非印字文字は 8 進数表記法で表示される) w ファイル名 ファイルにパターンスペースを追加する w コマンドが最初に呼び出されたときにはファイル の中身はクリアされる ■ホールドスペースの利用 g パターンスペースの内容をホールドスペースの内容で置換 G ホールドスペースの内容をパターンスペースに追加 h ホールドスペースの内容をパターンスペースの内容で置換 H パターンスペースの内容をホールドスペースに追加 x パターンスペースの内容とホールドスペースの内容を交 換する ■グループ化 {コマンドリスト } ■制御構造 b ラベル 指定したラベルの : コマンドに分岐 t ラベル 入力行の最新の読みとりまたは t の実行以降に代入が行 われている場合,指定したラベルの : コマンドに分岐 : ラベル ラベル付け q 終了 -----------------------------------------------------------------------