タグ付けされた質問 「grep」

ファイル内のテキストパターンを検索するコマンドラインツールであるgrepに関する質問。このタグは、grep自体に関する質問、またはgrepコマンドラインツールの使用から生じる問題に関する質問に使用します。

13
パイプ文字を持つパターンで複数のパターンをgrepするにはどうすればよいですか?
2つのパターンのいずれかに一致する複数のファイルですべての行を検索したい。入力して探しているパターンを見つけようとしました grep (foo|bar) *.txt しかし、シェルは|をパイプとして解釈しbar、実行可能ファイルではない場合に文句を言います。 同じファイルセットで複数のパターンをgrepするにはどうすればよいですか?


8
grepは、一致する指定されたグループのみを出力できますか?
ファイルがあるとしましょう: # file: 'test.txt' foobar bash 1 bash foobar happy foobar 「foobar」の後に表示される単語のみを知りたいので、この正規表現を使用できます。 "foobar \(\w\+\)" 括弧は、foobarの直後の単語に特別な関心があることを示しています。しかし、aを実行するとgrep "foobar \(\w\+\)" test.txt、「foobarの後の単語」ではなく、正規表現全体に一致する行全体が取得されます。 foobar bash 1 foobar happy そのコマンドの出力が次のようになっていることを望みます。 bash happy 正規表現でグループ化(または特定のグループ化)に一致するアイテムのみを出力するようにgrepに指示する方法はありますか?


6
grepを使用して発生の総数を数える
grep -cファイル内で文字列が何回出現するかを見つけるのに役立ちますが、各出現を1行に1回だけカウントします。行ごとに複数の発生をカウントする方法は? 私はよりエレガントなものを探しています: perl -e '$_ = <>; print scalar ( () = m/needle/g ), "\n"'
215 grep 

9
grepがファイルをバイナリと見なす理由は何ですか?
ボックスにWindowsシステムからのデータベースダンプがいくつかあります。テキストファイルです。私はそれらをgrepするためにcygwinを使用しています。これらはプレーンテキストファイルのようです。メモ帳やワードパッドなどのテキストエディターでそれらを開くと、見やすくなります。ただし、それらに対してgrepを実行すると、と表示されますbinary file foo.txt matches。 ファイルにいくつかのアスキーNUL文字が含まれていることに気付きましたが、これはデータベースダンプからのアーティファクトだと思います。 それでは、grepがこれらのファイルをバイナリと見なすのはなぜですか?NUL文字?ファイルシステムにフラグはありますか?grepを取得して行の一致を表示するには、何を変更する必要がありますか?
185 grep 

6
.gzファイルを再帰的にgrepするにはどうすればよいですか?
スクリプトを使用して、生の.emlを.gzファイルに圧縮するGmailメッセージを定期的にダウンロードしています。このスクリプトは、毎日フォルダを作成し、すべてのメッセージを独自のファイルに圧縮します。 この文字列で「文字列」を検索する方法が欲しいです。 Grepだけではそれができないようです。SearchMonkeyも試しました。


5
grepはtrue / falseを返すことができますか、代替方法があります
このスクリプトの一部として、指定された最初の引数がファイルの最初の単語と一致するかどうかを確認できる必要があります。存在する場合は、エラーメッセージで終了します。そうでない場合は、引数をファイルに追加します。ifステートメントの記述方法は理解していgrepますが、スクリプト内での使用方法は理解していません。私はそれgrepがこのようなものになることを理解しています grep ^$1 schemas.txt これは私が作っているよりもずっと簡単だと思う。 ifステートメントで「引数が多すぎます」というエラーが表示されます。私はその間のスペースを取り除いたgrep -q後、期待されるエラー二項演算子を得ました。 if [ grep -q ^$1 schemas.txt ] then echo "Schema already exists. Please try again" exit 1 else echo "$@" >> schemas.txt fi
130 grep 


4
一致するパターンの後の行の部分のみを返す
したがって、ファイルを開いcatてgrepから一致する行を取得するために使用するのは、現在扱っている特定のログセットを操作しているときだけです。行をパターンに一致させる方法が必要ですが、一致後の行の部分のみを返す必要があります。試合の前後の部分は一貫して変化します。sedまたはを使用して遊んでawkいますが、一致する前に部分を削除するか、一致した後に部分を返すために行をフィルタリングする方法を見つけることができませんでした。これは、フィルタリングする必要がある行の例です。 2011-11-07T05:37:43-08:00 <0.4> isi-udb5-ash4-1(id1) /boot/kernel.amd64/kernel: [gmp_info.c:1758](pid 40370="kt: gmp-drive-updat")(tid=100872) new group: <15,1773>: { 1:0-25,27-34,37-38, 2:0-33,35-36, 3:0-35, 4:0-9,11-14,16-32,34-38, 5:0-35, 6:0-15,17-36, 7:0-16,18-36, 8:0-14,16-32,34-36, 9:0-10,12-36, 10-11:0-35, 12:0-5,7-30,32-35, 13-19:0-35, 20:0,2-35, down: 8:15, soft_failed: 1:27, 8:15, stalled: 12:6,31, 20:1 } 私が必要とする部分は「停止」後のすべてです。 この背景には、何かがストールする頻度を見つけることができるという背景があります。 cat messages | grep stalled | wc -l 私がする必要があるのは、特定のノードが何回ストールしたかを調べることです(「ストール」後の各コロンの前の部分で示されます。失速していないので、私は助けにはなりません。 すべての意図と目的のために、これは標準のGNUコアutilsを備えたfreebsdシステムですが、支援するために追加のものをインストールすることはできません。


7
grep、awk、sedの基本的なチュートリアルはありますか?[閉まっている]
私はしばらくの間Linuxユーザーであり、ほとんどの一般的なコマンドラインユーティリティをかなりよく理解しています。しかし、プログラミングに関連して、再び起動して出てくるものがありgrep、awkとsed。 私がgrepを使用した唯一のことは、ログファイル内のファイル、出力psなどを見つけるためにパイプを使用することです。私は使用していないawkかsed、まったく使用していません。これらのユーティリティの良いチュートリアルはありますか?
95 grep  sed  awk 

2
デフォルトでgrepがバイナリファイルを無視しないのはなぜですか?
のマンページでgrepは、-Iフラグについて次のように説明しています。 -I Ignore binary files. This option is equivalent to --binary-file=without-match option. また、バイナリファイルについても次のように述べています。 --binary-files=value Controls searching and printing of binary files. Options are binary, the default: search binary files but do not print them; without-match: do not search binary files; and text: treat all files as text. バイナリファイルの一致を気にするシナリオは考えられません。そのようなシナリオが存在する場合、それは通常ではなく例外でなければなりません。grepこのフラグを設定する必要がなく、デフォルトでバイナリファイルを無視しないのはなぜですか?
94 grep 

8
複数のANDパターンでgrepを実行する方法は?
パターン間で暗黙的なANDを使用したマルチパターンマッチを取得したいと思います。つまり、シーケンスで複数のgrepsを実行するのと同じです。 grep pattern1 | grep pattern2 | ... それをどのように変換するのですか? grep pattern1 & pattern2 & pattern3 引数を動的に構築するため、単一のgrepを使用したいので、すべてが1つの文字列に収まらなければなりません。フィルターの使用はシステム機能であり、grepではないため、それは引数ではありません。 この質問と以下を混同しないでください。 grep "pattern1\|pattern2\|..." これはORマルチパターンマッチです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.