sedコマンドの備忘録

sedの備忘録を残す。

-eオプションについて

-e は、その後の文字列が編集用コマンドだということを表す。編集コマンドが一つだけの場合は省略可。 以下の例で、16行目のコマンド実行時に-eが未使用のため、エラーメッセージが表示されている。

 1$ cat samplefile
 2雷雨     : 雷をともなう雨
 3長雨     : 数日以上続く雨の天気
 4にわか雨 : 降水が地域的に散発する一過性の雨
 5
 6$ sed -e "s/雷/風/g" samplefile
 7風雨     : 風をともなう雨
 8長雨     : 数日以上続く雨の天気
 9にわか雨 : 降水が地域的に散発する一過性の雨
10
11$ sed "s/雷/風/g" samplefile
12風雨     : 風をともなう雨
13長雨     : 数日以上続く雨の天気
14にわか雨 : 降水が地域的に散発する一過性の雨
15
16$ sed "s/雷/風/g" "s/ともなう/伴う/g" samplefile
17sed: s/ともなう/伴う/g: No such file or directory
18風雨     : 風をともなう雨
19長雨     : 数日以上続く雨の天気
20にわか雨 : 降水が地域的に散発する一過性の雨
21
22$ sed -e "s/雷/風/g" -e "s/ともなう/伴う/g" samplefile
23風雨     : 風を伴う雨
24長雨     : 数日以上続く雨の天気
25にわか雨 : 降水が地域的に散発する一過性の雨
-nオプションについて

pコマンド以外の出力を抑制するので、pコマンドと一緒に使う。以下に使用例を示す。 6行目の実行ではsamplefileの1行目がプリントされ、9行目の実行では置換された行がプリントされる。

 1$ cat samplefile
 2雷雨     : 雷をともなう雨
 3長雨     : 数日以上続く雨の天気
 4にわか雨 : 降水が地域的に散発する一過性の雨
 5
 6$ sed -n "1p" samplefile
 7雷雨     : 雷をともなう雨
 8
 9$ sed -n -e "s/雷/風/gp" samplefile
10風雨     : 風をともなう雨
デリミタは/以外の文字でもOK

置換コマンドsの直後の1文字がデリミタとして扱われる。 例えば以下のようにデリミタを@として実行できる。

1$ cat samplefile
2雷雨     : 雷をともなう雨
3長雨     : 数日以上続く雨の天気
4にわか雨 : 降水が地域的に散発する一過性の雨
5
6$ sed -e "s@雷@風@g" samplefile
7風雨     : 風をともなう雨
8長雨     : 数日以上続く雨の天気
9にわか雨 : 降水が地域的に散発する一過性の雨
sコマンドの囲み文字は"が良い

囲み文字を'にすると、変数使用時に置換されないので注意。以下例で、14行目の実行結果で置換されていないことがわかる。 変数を使わなければ'でも可。

 1$ cat samplefile
 2雷雨     : 雷をともなう雨
 3長雨     : 数日以上続く雨の天気
 4にわか雨 : 降水が地域的に散発する一過性の雨
 5
 6$ before="雷"
 7$ after="風"
 8
 9$ sed -e "s/$before/$after/g" samplefile
10風雨     : 風をともなう雨
11長雨     : 数日以上続く雨の天気
12にわか雨 : 降水が地域的に散発する一過性の雨
13
14$ sed -e 's/$before/$after/g' samplefile
15雷雨     : 雷をともなう雨
16長雨     : 数日以上続く雨の天気
17にわか雨 : 降水が地域的に散発する一過性の雨
18
19$ sed -e 's/雷/風/g' samplefile
20風雨     : 風をともなう雨
21長雨     : 数日以上続く雨の天気
22にわか雨 : 降水が地域的に散発する一過性の雨
複数のスペースを1個にする方法

基本正規表現の使用時は、スペースを2個並べる必要あり。以下例の6行目参照。
拡張正規表現を使用するには-rオプションを指定する。(+は拡張正規表現、その他の拡張正規表現に?{m,n}がある)

 1$ cat samplefile
 2雷雨     : 雷をともなう雨
 3長雨     : 数日以上続く雨の天気
 4にわか雨 : 降水が地域的に散発する一過性の雨
 5
 6$ sed -e "s/  */ /g" samplefile
 7雷雨 : 雷をともなう雨
 8長雨 : 数日以上続く雨の天気
 9にわか雨 : 降水が地域的に散発する一過性の雨
10
11$ sed -r -e "s/ +/ /g" samplefile
12雷雨 : 雷をともなう雨
13長雨 : 数日以上続く雨の天気
14にわか雨 : 降水が地域的に散発する一過性の雨
削除コマンドdの使い方

パターンにマッチする文字列を含む行を削除対象としたり、行アドレスで指定することができる。

 1$ cat samplefile
 2雷雨     : 雷をともなう雨
 3長雨     : 数日以上続く雨の天気
 4にわか雨 : 降水が地域的に散発する一過性の雨
 5
 6$ sed -e "/一過性/d" samplefile
 7雷雨     : 雷をともなう雨
 8長雨     : 数日以上続く雨の天気
 9
10$ sed -e "2,3d" samplefile
11雷雨     : 雷をともなう雨

関連ページ