2017-03-26 13 views
0

にスラッシュの後にこれは私の拡張正規表現である正規表現と一致する結果を検索:これらは私の検索結果ですのLinux - 各パス


^\.(git.*|svn)$(それの変数、それはユーザーの入力だから):

./ivs-proj-2/.git/config 
    ./ivs-proj-2/.editorconfig 
    ./ivs-proj-2/mockup/mockup.png 

各スラッシュの後の結果の部分を正規表現に一致させる必要があります。一致する場合は、行全体を破棄する必要があります。行がない場合は、印刷して別の結果(行)にスキップする必要があります。

制限は、スクリプトが正しいことが条件です。私はawkを実験してきましたが、うまく動かないようです。すべての手がかりは?


結果は次のようになります。私はもしわからない

find ... | grep -vE '^.*/\.(git|svn)' 

./ivs-proj-2/.editorconfig 
./ivs-proj-2/mockup/mockup.png 

答えて

0
awk -F'/' '{for (i=1;i<=NF;i++) {if ($i ~ /^\.(git.*|svn)$/) next}; print}' <filename> 
+1

これは、ありがとうございます! – Sainthrax

0

あなたは正規表現を使用して結果をフィルタリングするためにgrep -vを使用することができますあなたの質問を理解していますが、一致したいと思っています:

.../.gitfoo/... 
.../.git/... 
.../.svn/... 
.../..../.gitfoo 
.../..../.git 
.../..../.svn 

と他には何もありません。あなたはそれが一致していなければならない終わり、で、半ばパスでのsvnとgitのといくつかなど、あなたの質問にいくつかのより多くの例を、追加した場合

awk '/\/\.(git.*|svn)(\/|$)/' file 
grep -E '/\.(git.*|svn)(/|$)' file 

:もしそうなら、これはあなたが求めている正規表現でありますあなたの要件を明確にするのに役立つでしょう。

+0

これはうまくいくはずですが、各フォルダまたはファイルの先頭から一致させる必要があります。したがって、私の表現から削除した "^" – Sainthrax

+0

これは動作しているようですが、今回は '$ 'を含めるのを忘れてしまったと思いますが?結果はどちらかと同じように見えますが、この場合の問題は、元のregexpを編集することができないことです。スクリプトの引数として提供できるからです。 – Sainthrax

+0

regexが外部ソースから提供できる場合、正規表現が正しいことをどのように確認しますか? – anubhava

0

./ivs-proj-2/.editorconfig 
    ./ivs-proj-2/mockup/mockup.png 
+0

私が前に述べたように、regexpは私が作成しているスクリプトの引数として提供されており、編集することはできません。 git regexpは単なる例です。試してくれてありがとう。 – Sainthrax

+0

私はあなたの質問のどこにそれが表示されません。あなたがコメントのどこかで言及した場合 - 私たちがあなたが投稿したすべてのコメントを読むことを期待しないでください、あなたの質問を編集して**すべての**関連情報を含むようにしてください。 –

関連する問題