文字列置換

文字列置換

文字列置換

メモ帳などでよく見る、「検索して置換」する機能は、LinuxのSEDにもあります。
文字列置換の構文は以下のようになります。

sed [アドレス1[,アドレス2]] ‘s/検索パターン/値/’ ファイル名

「アドレス1」と「アドレス2」は、検索や置換の範囲を指定するためのものであり、何も指定しないと、全ての行が対象になります。
「検索パターン」は、置換文字列で置き換えられる文字列です。

文字列置換の練習①

books.txtファイルでは、各列を区切るためにコンマ(,)を使用しています。
コンマを縦棒(|)に置換し、各列を区切りたい場合は以下のようになります。

[user01@localhost ~]$ sed 's/,/ | /' books.txt
1) A Storm of Swords |  George R. R. Martin, 1216
2) The Two Towers |  J. R. R. Tolkien, 352
3) The Alchemist |  Paulo Coelho, 197
4) The Fellowship of the Ring |  J. R. R. Tolkien, 432
5) The Pilgrimage |  Paulo Coelho, 288
6) A Game of Thrones |  George R. R. Martin, 864

文字列置換の練習②

すべてのコンマ(,)を置き換えるには、次のようにSEDでグローバルフラグ(g)を使用します。

[user01@localhost ~]$ sed 's/,/ | /g' books.txt
1) A Storm of Swords |  George R. R. Martin |  1216
2) The Two Towers |  J. R. R. Tolkien |  352
3) The Alchemist |  Paulo Coelho |  197
4) The Fellowship of the Ring |  J. R. R. Tolkien |  432
5) The Pilgrimage |  Paulo Coelho |  288
6) A Game of Thrones |  George R. R. Martin |  864

文字列置換の練習③

パターンがマッチした場合にのみ、文字列置換を指示することができます。
次の例では、文字列「The Pilgrimage」が含まれている行の中で、
コンマ(,)を縦棒(|)に置き換えるサンプルです。

[user01@localhost ~]$ sed '/The Pilgrimage/ s/,/ | /g' books.txt
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage |  Paulo Coelho |  288
6) A Game of Thrones, George R. R. Martin, 864

文字列置換の練習④

SEDは任意の文字を探し、一部を置き換えることができます。
以下は2番目のコンマ(,)を縦棒(|)に置き換えるサンプルです。

[user01@localhost ~]$ sed 's/,/ | /2' books.txt
1) A Storm of Swords, George R. R. Martin |  1216
2) The Two Towers, J. R. R. Tolkien |  352
3) The Alchemist, Paulo Coelho |  197
4) The Fellowship of the Ring, J. R. R. Tolkien |  432
5) The Pilgrimage, Paulo Coelho |  288
6) A Game of Thrones, George R. R. Martin |  864

文字列置換の練習⑤

置換を実行した後、変更された行のみを表示するオプションがあります。
処理した内容を出力する「-nオプション+pフラグ」を使用すると,、次の例のように
変更された行のみを出力することができます。

[user01@localhost ~]$ sed -n 's/Paulo Coelho/PAULO COELHO/p' books.txt
3) The Alchemist, PAULO COELHO, 197
5) The Pilgrimage, PAULO COELHO, 288

文字列置換の練習⑥

大文字と小文字を区別しない置換を実行するには、「iフラグ」を使用します。
次の例では、大文字と小文字を区別しない置換を実行します。

[user01@localhost ~]$ sed -n 's/pAuLo CoElHo/PAULO COELHO/pi' books.txt
3) The Alchemist, PAULO COELHO, 197
5) The Pilgrimage, PAULO COELHO, 288


NEXT>> 本章のまとめ