UNIXシェルスクリプト第7章 Part1

フィルタの使用法

cat file1 file2 file3... | filter_1 | ...

複数のファイルをまとめて処理したければ、catコマンドの引数にファイルを書き並べれば良い。

 

filter_1 < file filter_2 | ...

1つだけのファイルならリダイレクション機能を使うほうが良い。

 

sedコマンドの使用法

$ sed -e "s/OldText/NewText/" samplefile

標準的な使い方。

 

sed -e "s/OldText/NewText/" samplefile > result

結果を残したければ、リダイレクトする。

sed -e "s/OldText/NewText/" < samplefile > result

$ cat samplefile | sed -e "s/OldText/NewText/" > result

どちらも上と同じ意味。

-eというオプションは、その後の文字列が編集用のコマンドだということを表す。

編集コマンドが1つしかない場合は省略してよい。

また、編集コマンド内のsは置換(substitute)を意味する。

 

s/OldText/NewText/g

1行の中で見つけた文字列をすべて置き換える場合には、globalを意味するgをつける。

 

$ sed -e "s/$OldText/$NewText/g" samplefile

変換処理をさせるコマンドの中には変数を使うことも可能。

ただし、ダブルクォーテーションで囲む必要がある。

 

$ sed -n '2p' < samplefile

-nオプションを使うと、指示した行だけを標準出力に書き出すという動作に変わる。

このオプションを使う場合は、printしなさいという意味でpを必ず一緒に使う。

 

$ sed -n -e "s/OldText/NewText/gp" samplefile

行指定と、置換処理を組み合わせると、このようになる。

pの位置に注意。

 

s%abc%ef%ABC-EF%g

sedコマンドのデミリタ(区切り文字)は慣習的に / を使うが、何を使っても良い。

宣言も特に必要なく、sの直後の1文字がデミリタとして扱われる。

処理させたい文字列に / が入っている場合などは他の文字をデミリタにするとわかりやすい。