私のディレクトリ構造には多くのファイルがあります。正規表現を使用して、このファイルからいくつかの文字列(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
名前が次に終わる現在のディレクトリのサブディレクトリにあるすべてのファイルを見つけるための別のフォーマットがあります。.html
alder
find *alder/ -name '*.html' -exec grep -oh "http://[^'\"]*" {} +
より強力なアプローチ
他の種類の誤ったファイルを防ぐために、html
Casはスペースまたは>
URLの末尾を使用することをお勧めしhttps
ますhttp
。
find . -path "*alder/ * / * .html" -exec grep -oEh "https?://[^'\"[:space:]>]*" {} +