1974年にKenThompsonによって開発された古典的なUnixコマンドの1つは、Global Regular Expression Print(grep)コマンドです。コンピューティングでは非常にユビキタスであるため、動詞として頻繁に使用され(「ファイルを調べる」)、視聴者のオタクによっては、実際のシナリオにもうまく適合します。 (たとえば、「その情報を呼び出すには、メモリバンクをgrepする必要があります。」)要するに、grepは、ファイルを検索して特定の文字パターンを探す方法です。それがワードプロセッサやテキストエディタで利用できる最新の検索機能のように聞こえる場合は、コンピューティング業界に対するgrepの影響をすでに経験しています。
現代のテクノロジーに取って代わられた古風な趣のあるコマンドであるだけでなく、grepの真の力は2つの側面にあります。
- Grepはターミナルで動作し、データストリームを操作するため、複雑なプロセスに組み込むことができます。 見つけるだけではありません テキストファイル内の単語。単語を抽出したり、別のコマンドに送信したりできます。
- Grepは正規表現を使用して、柔軟な検索機能を提供します。
grep
を学ぶ コマンドは簡単ですが、ある程度の練習が必要です。この記事では、私が最も役立つと思う機能のいくつかを紹介します。
[無料のgrepチートシートをダウンロード]
grepのインストール
Linuxを使用している場合は、すでにgrepがインストールされています。
macOSには、BSDバージョンのgrepがあります。これはGNUバージョンとは少し異なるため、この記事に正確に従う場合は、HomebrewやMacPortsなどのプロジェクトからGNUgrepをインストールしてください。
基本的なgrep構文は常に同じです。 grep
を提供します 検索するパターンとファイルをコマンドします。その見返りに、各行を一致して端末に出力します。
$ grep gnu gpl-3.0.txt
along with this program. If not, see <http://www.gnu.org/licenses/>.
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
デフォルトでは、 grep
コマンドでは大文字と小文字が区別されるため、「gnu」は「GNU」または「Gnu」とは異なります。 -ignore-case
を使用して、大文字と小文字を無視させることができます オプション。
$ grep --ignore-case gnu gpl-3.0.txt
GNU GENERAL PUBLIC LICENSE
The GNU General Public License is a free, copyleft license for
the GNU General Public License is intended to guarantee your freedom to
GNU General Public License for most of our software; it applies also to
[...16 more results...]
<http://www.gnu.org/licenses/>.
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
grep
を作成することもできます コマンドはなしですべての行を返します -invert-match
を使用した一致 オプション:
$ grep --invert-match \
--ignore-case gnu gpl-3.0.txt
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
[...648 lines...]
Public License instead of this License. But first, please read
ファイル内のテキストを見つけることができると便利ですが、POSIXの真の力は、「パイプ」を介してコマンドを連鎖させる機能です。 grepを最もよく使用するのは、cut、tr、curlなどの他のツールと組み合わせた場合です。
たとえば、ダウンロードしたい技術論文をリストしたファイルがあるとします。ファイルを開いて各リンクを手動でクリックし、Firefoxのオプションをクリックして各ファイルをハードドライブに保存することもできますが、それは多くの時間とクリックです。代わりに、ファイル内のリンクをgrepして、のみを出力することができます。 -only-matching
を使用した一致する文字列 オプション:
$ grep --only-matching http\:\/\/.*pdf example.html
http://example.com/linux_whitepaper.pdf
http://example.com/bsd_whitepaper.pdf
http://example.com/important_security_topic.pdf
出力は、それぞれが1行にあるURLのリストです。これは、Bashがデータを処理する方法に自然に適合しているため、URLを端末に出力する代わりに、それらを curl
にパイプするだけで済みます。 :
$ grep --only-matching http\:\/\/.*pdf \
example.html | curl --remote-name
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
これにより、各ファイルがダウンロードされ、リモートファイル名に従ってハードドライブに保存されます。
この例の私の検索パターンは不可解に見えるかもしれません。これは、正規表現を使用しているためです。これは、大量のテキストを幅広く検索する場合に特に役立つ「ワイルドカード」言語の一種です。
正規表現(略して「regex」)が簡単であるという幻想を抱いている人は誰もいません。しかし、私はそれがそれに値するよりも悪い評判を持っていることが多いと思います。確かに、人々が少しあまりにも賢いになる可能性があります 正規表現を使用すると、読みにくく、幅が広くなり、折りたたまれますが、正規表現をやりすぎる必要はありません。これが私がそれを使う方法を正規表現するための簡単な紹介です。
まず、 example.txt
というファイルを作成します このテキストを入力します:
Albania
Algeria
Canada
0
1
3
11
正規表現の最も基本的な要素は、謙虚な。
です。 キャラクター。単一の文字を表します。
$ grep Can.da example.txt
Canada
パターンCan.da
Canada
が正常に返されました 。
1つを表す文字 キャラクター。
。コード> ワイルドカードは、次の表記で複数の文字を表すように変更できます。
-
?コード> 前の項目に0回または1回一致します
-
*
前のアイテムと0回以上一致する -
+
前のアイテムと1回以上一致する -
{4}
前の項目に4回(または中かっこで入力した任意の数)一致します
この知識を身に付ければ、 example.txt
で正規表現を練習できます。 午後中ずっと、あなたが思いついた面白い組み合わせを見てください。一部は機能しません。他の人はそうするでしょう。重要なのは結果を分析することです。そのため、理由を理解できます。
高度な正規表現には-extended-regexpが必要です または-E オプション。
たとえば、これはどの国も返すことができません:
$ grep -E A.a example.txt
。
が原因で失敗します レベルアップしない限り、キャラクターは1つのキャラクターにしか一致しません。 *
を使用する 文字、 grep
を伝えることができます 単語の終わりに達するまで、単一の文字をゼロまたは必要な回数だけ一致させます。扱っているリストを知っているので、ゼロ回 この場合は役に立たない。このリストには、3文字の国の名前は絶対にありません。したがって、代わりに +
を使用できます 単語の終わりまで、1つの文字を少なくとも1回、次に必要な回数だけ一致させるには:
$ grep -E A.+a example.txt
Albania
Algeria
角かっこを使用して、文字のリストを提供できます:
$ grep -E [AC].+a example.txt
Albania
Algeria
Canada
これは数字にも有効です。結果はあなたを驚かせるかもしれません:
$ grep [1-9] example.txt
1
3
11
1から9までの数字の検索で11が表示されることに驚いていますか?
リストに13を追加するとどうなりますか?
これらの数字は、一致する数字のリストに含まれる1が含まれているために返されます。
ご覧のとおり、正規表現はパズルのようなものですが、実験と実践を通じて、正規表現に慣れ、データをgrepする方法を改善するために使用できます。
grep
コマンドには、この記事で示したよりもはるかに多くのオプションがあります。結果のフォーマットを改善したり、一致を含むファイルと行番号を一覧表示したり、一致を囲む行を印刷して結果のコンテキストを提供したりするオプションがあります。 grepを学習している場合、またはgrepを頻繁に使用していて、 info
を検索することに頼っている場合。 ページ、あなたはそれのために私たちのチートシートをダウンロードすることによってあなた自身に賛成するでしょう。チートシートは短いオプションを使用します( -v
--invert-matching
の代わりに たとえば)一般的なgrepの省略形に慣れるための方法として。また、最も一般的な正規表現コードを覚えておくのに役立つ正規表現セクションも含まれています。今日grepチートシートをダウンロードしてください!