目录结构中有许多文件。我希望使用regexp从这些文件中提取一些字符串(即urls)。
我试过这个:
find . -path "*alder/ * / * .html" -print | xargs sed -n "/http:\/\/[^'\"]*/p" > urls.txt
..。但它并不像预期的那样起作用。find
部件工作正常,xargs
部件工作正常,但sed
部件工作正常,不工作。我在urls.txt中得到的只是所有文件的连接。
发布于 2016-06-14 21:48:24
使用相同的find
命令,这将返回与regex匹配的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:]>]*" {} +
发布于 2016-06-14 23:11:26
谢谢你这么快的回答。很抱歉,路径中的额外空间,但删除它们会使路径变成奇怪的东西时,试图在这里张贴。
我想要使用sed,因为grep在超过1.2个gB,25,000个文件上真的非常慢。
我找到答案了。首先使用sed命令用"'= chars“分割文件,然后再使用sed命令打印行。
找出来。-path "*alder.com/ */* .html“-print| xargs sed -r”S/“=/\n/g“urls.txt -n "/^http\s?:/p”>urls.txt
https://unix.stackexchange.com/questions/289764
复制相似问题