grep これは、GNU / Linuxコマンドラインで最も使用されているツールのXNUMXつです。 非常にシンプルなツールですが、多数の操作を実行できます。 これは、前のコマンドの出力などで特定のポイントを見つけることができるように、特にパイプと一緒に使用されます。 ただし、-Eオプションを指定してgrepを実行するのと同等のegrepと呼ばれるツールもあります。
eは「Extendedregex」から取得されます。これは、-Eオプションをアクティブにし、そのオプションを使用せずにデフォルトでegrepにあるものです。 つまり、を使用することができます 拡張正規表現。 このチュートリアルでは、正規表現とは何か、それらの使用方法、および* nixに含まれる型については説明しません。 egrepで実行できるいくつかの便利な例を紹介します...
grep、egrep、およびfgrepは類似しています。 実際、egrepはgrep -Eと同等であり、fgrepはgrep-Fと同等です。 つまり、私たちに関係する場合は、パターンも正規表現として解釈します。
あなた 行または単語を検索する grepの場合と同様に、XNUMXつ以上のファイルで。 たとえば、snap.txtというファイルと現在のディレクトリ内のすべての.txtファイルでubuntuという単語を検索するとします。
egrep ubuntu snap.txt
egrep ubuntu *.txt
検索することもできます 再帰的 現在のディレクトリの内容全体を検索するには:
egrep -r "hola mundo" *
これまで、正確な単語または文字列が検索されました。つまり、大文字と小文字(大文字と小文字が区別されます)が考慮されましたが、大文字と小文字を区別しないモードで検索する場合は、 大文字でも小文字でも、次を使用できます(wを追加すると、完全に一致するものだけが見つかります):
egrep -i "ejemplo" documento.txt
egrep -iw "ejemplo" documento.txt
偶然ではなく、見せてください それらの一致が見つかったファイル名:
egrep -l hola *.txt
パターンまたは単語のみを表示する ドキュメント内で検索:
egrep -o printf hola.c
想像できるすべての可能性を使用できることを忘れないでください。 以前に見たオプションのいくつかを組み合わせることができます。または、-Anや-Bnなどの他のオプションでそれらを補完することもできます。ここでn 前(前)と後(後)に表示する行数 試合の、または両方を同時に(C)、試合を取り巻くものを確認できるようにします。
egrep -A 2 "printf" hola.c
egrep -B 2 "printf" hola.c
egrep -C 2 printf hola.c
一致する行を抑制し、一致しない行のみを表示します。
egrep -v "dos" números.doc
または、必要に応じて、 複数の単語または-eとの一致。 例えば、
egrep -v -e "uno" -e "dos" -e "tres" números.txt
使用する場合 -cは一致の数のみをカウントできます、または-vで反転して、不一致の行の数を表示します。 例えば:
egrep -c "include" main.c
egrep -v -c "include" main.c
そして 行番号を表示 一致が発生した場所、およびそれぞれが占める位置:
egrep -n "void" hola.c
egrep -o -b "printf" hola.c
そしてと一緒に 正規表現 その機能は拡張できます。 たとえば、Helloで始まり、byeで終わる行、またはHelloで始まり、その後に何かが続く行を見つけて、一致するbyeがそれぞれ表示されます。
*次のコマンドの修正:読者のManuel Alcocerのコメントのおかげで、エラーが発生したため、次のコマンドを変更することができました。
egrep '^Hola.*adiós$' ejemplo.txt
egrep "Hola.*adiós" ejemplo.txt
しかし、grepとの違いについて疑問がある場合は、これが明確になる例です... -Eなしでgrepを使用する場合は、 エスケープシーケンス 特殊文字をそのように解釈するように、そうでない場合は、それらを考慮せずにパターンをそのように解釈します。 一方、egrepまたはgrep -Eを使用すると、それらが考慮されます。 例えば:
grep '^no\(fork\|group\)' /etc/group
これは次と同等です。
grep -E '^no(fork|group)' /etc/group
egrep '^no(fork|group)' /etc/group
つまり、noforkまたはnogroupで始まる一致する行を探します。 しかし、エスケープシーケンスなしでgrepの最初の式を使用した場合、それが行うことは検索です 具体的なパターン いいえ(フォーク|グループ):
grep 'no(fork|group)' /etc/group
検索することもできます 英数字の範囲、または特定のIPを見つけるなどの特定の値:
cat /etc/networks | egrep "192.168.1.[5-9]"
cat /etc/networks | egrep "192.168.[1-3].[5-9]"
cat /etc/networks | egrep "192.168.1.[0-3]|[5-9]"
egrep 192.168.4.[10,40] networks
必要に応じて、他の正規表現を使用してより具体的な検索を行うことができます。 例| XNUMXつを見つけるために 偶然か他の:
egrep -i '^(printf|scanf)' hola.c
あなたも見つけることができます 大文字、小文字、英字のみ、または英数字など。、次のような他の式を使用:[:alnum:]、[:alpha:]、[:digit:]、[:lower:]、[:print:]、[:punct:]、[:space:]、[ :アッパー:]など。 たとえば、大文字を検索するには、次のようにします。
egrep [[:upper:]] diccioario
お役に立てば幸いです...すぐに、それに特化した記事で正規表現について説明します...
今日は。
いくつかの発言...
'egrep'コマンドについて説明しますが、 'egrep'と 'grep'の違いを入れないでください。これがここにあるはずです。
例えば:
grepの場合:ip -4 a | grep '[0-9] \ +'
egrepの場合:ip -4 a | egrep '[0-9] +'
ああ、これは間違っています、 'egrep "Hello。* Bye" example.txt'; ここでの成功は、文字列「Hello」、その後に「goodbye」が続く行がファイルにある場合に発生します。この行は、実際には何でも開始および終了できます。
これは記事が言うことです:
egrep '^こんにちは。*さようなら$' example.txt
そして、すべてのオプション、またはほとんどすべて(私はそれをチェックするのをやめません)は、排他的に「egrep」ではなく「grep」のオプションです。
宜しくお願いします。
そのエラーを報告していただきありがとうございます。 正規表現についてコメントされていることは、すでにXNUMX番目の段落に記載しています。 たくさんあり、この記事は時間がかかりすぎるので、私は彼らに特定の記事を捧げます。 挨拶!
こんにちは、アイザック。
XNUMX番目の段落では、基本的に「egrep」は「grep -E」のエイリアスであると言っているか、言うべきでしたが、「egrep」を正規表現で使用した例はありません。 'grep'によって使用されます。
拡張正規表現を説明するために記事を捧げることは、とりわけ、広告を出さず、GNUコミュニティにとって非常に重要な情報提供を行っているこのようなサイトがあるため、私には大胆に思えます。 https://www.rexegg.com/
私はトローリングのためにここに書いているのではありません。誰かがこのエントリを読んで「egrep」または「grep」が何をするかを確認する場合は、他のソースを見てください。このエントリは何も参照できません。少し、ひどく、余分な情報を提供し、特にGNUとそれが提供する強力なツールの知識がない人にとっては混乱する可能性があります。
最後に、最初のコメント(^ $)の後に示したバグを追加して修正しました。 他のサイトと同様に、修正を行った人を引用するか、少なくとも、このブログが開始されて失われたのと同じベースであるGNUベースの一部である修正であると言う必要があります。
挨拶。
あなたの視点をありがとう。
フサフ