Unix / Linux - SEDでの正規表現

こんにちは、将来のコマンドラインの魔法使いたち!今日は、正規表現(regex)と強力なSEDコマンドの魔法の世界に飛び込みます。シートベルトを締めて、テキスト操作の方法を大きく変える興奮的な冒険に乗り出しましょう!

Unix / Linux - Regular Expressions

sedの呼び出し方

まず基本から始めましょう。SEDは「ストリームエディタ」の略で、強力なテキスト処理ツールです。使い方は簡単で、「sed」に続けてコマンドを打ち込むだけです。まるでテキスト操作の精霊を呼び出すようなものです!

sed 'command' filename

例えば:

sed 's/hello/bonjour/' greetings.txt

このコマンドは、greetings.txtファイルの「hello」を「bonjour」に置き換えます。シンプルですね?

sedの一般的な構文

sedの一般的な構文は魔法の呪文のようです:

sed オプション... [スクリプト] [入力ファイル...]

これが複雑に見えるかもしれませんが、パズルを解くように少しずつ見ていきましょう!

sedで全行を削除する

ファイル内のすべてのテキストを消したいですか?sedでできます!以下のようにします:

sed 'd' filename

これでファイル内の全行が削除されます。デジタルノートに消しゴムを使うようなものです!

sedのアドレス

sedのアドレスは、テキストのGPS座標のようなものです。sedが魔法を発動する場所を指定します。以下にいくつかの例を示します:

sed '2d' file.txt  # 2行目を削除します
sed '/pattern/d' file.txt  # 'pattern'を含む行を削除します

sedのアドレス範囲

時々、行の範囲に魔法をかけたいときがあります。以下のようにします:

sed '2,5d' file.txt  # 2行目から5行目までを削除します
sed '2,$d' file.txt  # 2行目からファイルの終わりまでを削除します

置換コマンド

置換コマンドはsedの基本中の基本です。それは「検索と置換」を強化したものです!

sed 's/old/new/' file.txt

これで各行の最初の「old」を「new」に置き換えます。

置換フラグ

フラグは置換コマンドの強化アイテムです。以下に一般的なフラグを示します:

フラグ 説明
g 最初以外のすべての発生を置換
i 大小文字を区別しない
p 変更された行を表示
w 結果をファイルに書き込む

例:

sed 's/cat/dog/g' pets.txt

これは「cat」のすべての発生を「dog」に置き換えます。

別の文字セパレータの使用

テキストに多くのスラッシュが含まれている場合でも問題ありません!別のセパレータを使用できます:

sed 's#/usr/local/bin#/common/bin#' paths.txt

ここでは、スラッシュの代わりにシャープをセパレータとして使用しています。

空白で置換する

テキストを完全に消したいですか?以下のようにします:

sed 's/unwanted//g' file.txt

これは「unwanted」のすべての発生を削除します。

アドレスと置換の組み合わせ

アドレスと置換を組み合わせて、精密なテキスト操作を行います:

sed '3,6s/foo/bar/g' file.txt

これは3行目から6行目までの「foo」をすべて「bar」に置き換えます。

モッチングコマンド

モッチングコマンドは、関心のある行を光のように照らします:

sed -n '/pattern/p' file.txt

これは「pattern」を含む行だけを表示します。

正規表現の使用

ここまで來て、本物の魔法の部分にたどりつきました!正規表現はワイルドカードの強化版です。以下に簡単な例を示します:

sed -n '/^The/p' story.txt

これは「The」で始まるすべての行を表示します。

文字の一致

正規表現には、変化自在な文字があります:

文字 意味
. 任意の1文字
* 前の文字の0回以上
^ 行の始まり
$ 行の終わり

例:

sed -n '/c.t/p' animals.txt

これは「cat」、「cot」、「cut」などに一致します。

文字クラスキーワード

文字クラスは、チームのような文字です。以下にMVPプレイヤーをいくつか示します:

クラス 一致
[:alpha:] 英字
[:digit:] 数字
[:alnum:] 英数字

例:

sed -n '/[[:digit:]]/p' data.txt

これは任意の数字を含む行を表示します。

アンカーの参照

アンカー(&)は、一致したものを反映する魔法の鏡です:

sed 's/[0-9]/(&)/' numbers.txt

これは各数字の周りに括弧を付けます。

複数のsedコマンドの使用

一度に複数の呪文をかけたいですか?-eオプションを使用します:

sed -e 's/foo/bar/g' -e 's/baz/qux/g' file.txt

これは一度に2つの置換を行います!

バックリファレンス

バックリファレンスは、タイムマシンのように一致した部分を再利用します:

sed 's/\(.*\):\([^:]*\)/\2:\1/' names.txt

これはコロン前後のテキストを swap します。

そして、ここまでが、私たちのsedと正規表現の旅です。練習は完璧を生みます。ですから、コマンドラインの魔法使いとして、テキストを操作してみてください!幸せなコーディングを!

Credits: Image by storyset