findとsedを使用して複数のファイルの行を印刷するには?

findとsedを使用して複数のファイルの行を印刷するには?

私のディレクトリ構造には多くのファイルがあります。正規表現を使用して、このファイルからいくつかの文字列(URLなど)を抽出したいと思います。

私はこれを試しました:

find . -path "*alder/ * / * .html" -print | xargs sed -n "/http:\/\/[^'\"]*/p" > urls.txt

...しかし、期待どおりに動作しません。このfind部分はうまく機能し、その部分xargsは大丈夫ですが、その部分sedはそうではありません。私がurls.txtから取得するのは、すべてのファイルをリンクしただけです。

ベストアンサー1

同じfindコマンドを使用すると、正規表現に一致するURLが返されます。

find . -path "*alder/ * / * .html"  -exec grep -oh "http://[^'\"]*" {} +

これとは異なり、find...-print | xargs command...この方法は、名前にスペースやその他の難しい文字を含むファイルに適用されます。

オプションは、一致する部分のみを返し、一致する部分のみを返すように指示 -oします。一致する項目が見つかったファイル名の印刷を無視するように指示します。grep-h

OPのコマンドは、find名前パスにスペースが含まれているファイルのみを照合します。これはあなたが望むものではないと思うので、ここにfind名前が次に終わる現在のディレクトリのサブディレクトリにあるすべてのファイルを見つけるための別のフォーマットがあります。.htmlalder

find *alder/ -name '*.html' -exec grep -oh "http://[^'\"]*" {} +

より強力なアプローチ

他の種類の誤ったファイルを防ぐために、htmlCasはスペースまたは>URLの末尾を使用することをお勧めしhttpsますhttp

find . -path "*alder/ * / * .html"  -exec grep -oEh "https?://[^'\"[:space:]>]*" {} +

おすすめ記事