私があなたを正しく理解しているならば、あなたはあなたが使うことを可能にする正規表現が欲しいです 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つは決して確信できないので、それほど厳密ではない何かを使用して、私の最初の提案のようにしてください。