sedメモ
よりsedメモ
置換コマンド
[一般的な置換]
コマンド 説明 sed 's/A/B/' [infile] infile の中にある A を B に変換して標準出力へ出力。
ex. sed 's/sample/example/' sample.txt
cf. 「'」は「"」としても同じ。sed 's/z/x/' sample.txt sample.txt の各行の最初のzをxに変換する。 sed 's/i/x/g' sample.txt sample.txt の各行の全てのzをxに変換する。 sed 's/i/x/2' sample.txt sample.txt の各行の2番目のzをxに変換する。 sed -e 's/z/x/' -e 's/i/x/2' sample.txt 2つの作業を同時に行う。
sed 's/z/x/' sample.txt | sed 's/i/x/2' に同じ。sed -f sedscript sample.txt スクリプトファイルの作業を行う。
sedscript の内容は次のようになっている。
s/z/x/
s/i/x/2
[アドレスを指定する置換]
コマンド 説明 sed '/you/s/i/x/g' sample.txt you という文字列のある行の全てのzをxに変換する。 sed '1,3s/i/x/g' sample.txt 1〓3行目の全てのzをxに変換する。
cf. sed '1,3/s/i/x/g' sample.txt とする場合もあるようです。(未確認)sed '1,/abc/s/i/x/g' sample.txt 1行目からabcという文字列がある行までの全てのzをxに変換する。
[削除]
コマンド 説明 sed 's/you//' sample.txt you を削除する。 sed '/you/d' sample.txt you のある行を削除する。
cf. grep -v you sample.txt と同じ。
正規表現
メタキャラクタ
表現 名称 説明 . ドット 改行以外の任意の一文字。
DOSのワイルドカード「?」にあたるもの。* アスタリスク 直前の文字の0回以上の繰り返し。
cf. DOSでは、「*」は単純に複数の文字の代わりとなる。
ex1. grep 'HH*' sample.txt の結果は Hello, World! だけだが、
grep 'H*' sample.txt とすると、直前のHの0回以上の繰り返し
すなわち「Hがあってもなくてもいいぞ!」という意味になるため、
sample.txtの内容がすべて表示される。
ex2. grep -w 's.*' sample.txt の結果は sed, sample の含まれる
3行が表示される。^ サーカムフレックス 行頭という意味。
使う位置によって実は意味が2通りにわかれる。
ブラケット「[]」の中の一番先頭に置くと、それ以降に指定する文字以外という意味になる。$ ドル記号 行末のこと。
ex. 「^$」は、「行末が先頭である」つまり、中味がなにもない
(スペースさえも入ってない) 空行のこと。[ ] ブラケット 中に入っている文字のどれかひとつにあてはまることを示す。
ex1. A[BC]は、ABあるいはACのこと。
ex2. [0-9]は、数字のこと。
ex3. [^0-9]は、数字以外のこと。
ex4. [^0-9a-zA-Z]は、アルファベットと数字以外のこと。\ 円記号・バックスラッシュ メタキャラクタをメタではない普通の文字に戻す。
ex. A[BC]は、AB、あるいはACのこと
カプセル化
変数として別の場所で使える形にすることをカプセル化といい、「\(」と「\)」でカプセル化する部分を指定する。
コマンド 説明 sed 's/\(.*\)/your file : \1/' sample.txt sample.txt のファイルの前に「your file :」という文字列を加えて出力する。