Unixディレクトリのテキストマッチングフォーマットをファイルで検索


0

ディレクトリ内のすべてのファイルを検索して、任意のディレクトリのパターンと一致するテキストを探します。これの出力ファイルで参照されているすべてのディレクトリのリストを作成するために使用したいと思います(この部分は私が自分で把握できると思います)。

私はさまざまな正規表現リソースを調べて、ブラウザベースのツールでは機能するように見えるが、コマンドラインではgrepでは機能しないような独自の式を作成しました。

/\w+[(/\w+)]+

私のこれまでのところ理解していることは、上の式はディレクトリの始まりを探し、次に同じことを繰り返すブロックを探す前に不定数の文字を探すということです。

任意のガイダンスは大歓迎です。


括弧と "+"は文字クラスの内側にあります。 "["と "]"はあなたが探している文字のクラスを定義します。 "[]"の間に "("、 ")"、および "+"を含めると、これらの文字を特に一致させることができます。括弧と "+"をあなたのキャラクタークラスの外側に使いたいと思うでしょう:([/ \ w] +)。これは、「/」と英数字の任意の組み合わせに一致し、それを取り込むはずです。いつもgrepでregexを使おうとするのに迷ってしまったので、私はこの答えを投稿しませんでした。
erewok

回答:


1

私があなたを正しく理解しているならば、あなたはあなたが使うことを可能にする正規表現が欲しいです grep パスを識別します。あなたが投稿した正規表現をどうしようとしているのかよくわかりません。何故あなたは何かが繰り返されることを望みますか?パスは単一のスラッシュのみを必要とします。 /etc

とにかく、あなたがどんな種類のパスが欲しいなら(パスはまた非ワード文字を含むことができます {[( スペースや改行など)を試してください。

grep -E '/[^/]+' *txt
          _____
           |  |--------> one or more
           |-----------> A character class, '^' in a character class means NOT,
                         so this class means "anything that is not /".

-E 言う grep あなたが与えるパターンは、 拡張正規表現 デフォルトではなく、基本正規表現です。 EREのサポート + 最初のスラッシュの後に少なくとも1つの非スラッシュ文字を含むストリングのみを見つけるために必要な「1つ以上」の場合。

複数のパスがあるパスのみを検索したい場合 /、あなたはのようなことをすることができます

grep -E '/[^/]+/[^/]+' *txt  

なんらかの理由でこのような末尾のスラッシュを使い続けたい場合は、パスをスラッシュで終わらせることもできます( /? 「ゼロまたは1を見つける」という意味 / ):

grep -E '/[^/]+/[^/]+/?' *txt  

具体的には、使用している正規表現はさまざまな理由で失敗します。まず第一に、@ erewokが指摘したように、あなたは括弧と + かっこ内。大括弧はaを指定するので 文字クラス それらの中にあるものはすべて、見つかる文字の1つとして扱われます(ただし、 ^ それはそれになります 否定文字クラス

そう、 [(/\w+)]+ のいずれかを検索する手段 (/任意の単語文字( \w+ または ) 1回以上いかなる場合でも、 \w によって認識されていない grep 使用しない限り Perl互換の正規表現 。あなたはこれらをアクティブにすることができます grep とともに -P フラグたとえば、これは次のようなパスに一致します。 /etc

grep -P '/\w+' *txt

もし、あんたが 知っている パスは常に単語文字(a-z、A-Z、0-9、および _ )、あなたは上記のような表現を使用することができますが、1つは決して確信できないので、それほど厳密ではない何かを使用して、私の最初の提案のようにしてください。

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