みなさん、こんにちは、
みむすたーです。
ターミナル上でコマンドを実行した時に出力された文字列の中から、
文字列の検索や置換を行いたいということは、多々あると思います。
そんなお悩みの声を解決するべく、
本記事では、grepとsedの2つのコマンドについてご紹介したいと思います。
もくじ
名前の由来と概要
grepコマンド
Global Regular Expression Printの略です。
grepコマンドは、文字列のフィルターです。
文字の羅列が入力されたとき、条件にあった文字列のみをピックアップして、出力するものです。
例えば、abc123という文字の羅列があり、
数字のみをピックアップする”数字フィルター”と、
英字のみをピックアップする”英字フィルター”があったとき、以下のように機能します。
abc123 → 数字フィルター → 123 (abcが除外される)
abc123 → 英字フィルター → abc (123が除外される)
sedコマンド
String EDitorの略です。
sedコマンドは、文字列のコンバーターです。
文字の羅列が入力されたとき、条件にあった文字列のみに変換をかけて、出力するものです。
例えば、abc123という文字の羅列があり、
数字のみを * (アスタリスク)に変換する”数字コンバーター”と、
英字のみを * (アスタリスク)に変換する”英字コンバーター”があったとき、以下のように機能します。
abc123 → 数字コンバーター → abc*** (123を***に変換した)
abc123 → 英字コンバーター → ***123 (abcを***に変換した)
grepコマンドの使い方
単純な文字検索
一番基本的な使い方としては、-eオプションをつける検索方法です。
-eは、-regexpの省略形です。
-eオプションをつけた場合は、以下のように使います。
例えば、以下の文字列が書かれたファイル test.txt の中から、
grepコマンドで文字列の検索をかけることを考えましょう。
abcdefghijklmnopqrstuvwxyz
1234567890
Hi, mimustar.
上の文字列から abc という文字列を探す場合は、以下のように書きます。
grep -e abc test.txt
すると、以下のように出力されます。
abcdefghijklmnopqrstuvwxyz
検索の結果、一致する行が出力されます。
上の例でも、abcを含む行が抜き取れていますね。
正規表現を使った文字検索
もちろん、検索する文字列は正規表現でも書けます。
今回は、小文字の英字が存在する行を検索してみましょう。
小文字の英字を検索する場合は、[a-z]で指定します。
そして、正規表現を使用する場合は、検索文字を “(ダブルクオーテーション) で囲む必要があります。
grep -e "[a-z]" test.txt
上のコマンドを実行した結果は以下の通りとなります。
abcdefghijklmnopqrstuvwxyz
Hi, mimustar.
2行目の数字のみの行が出力されておらず、他の小文字の英字が含まれる行のみが出力されています。
sedコマンドの使い方
単純な文字の置換
こちらも基本的な使い方としては、-eオプションをつける置換方法です。
ただし、-eオプションは特に何かのオプションの省略形ではないです。
置換する文字列の指定方法は、
-eオプションの後に “s/置換前の文字/置換後の文字/g” と書きます。
sは、置換前の文字列から置換後の文字列に変換することを表し、
gは、置換前の文字列を全て検索するかどうかを表しています。
今回は、123をabcに変えてみましょう。
sed -e "s/123/abc/g" test.txt
上のコマンドを実行したとき、以下が出力されます。
abcdefghijklmnopqrstuvwxyz
abc4567890
Hi, mimustar.
123456789となっていた部分が、abc456789となっていますね。
コメント