首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多个文件中使用查找和sed打印行?

如何在多个文件中使用查找和sed打印行?
EN

Unix & Linux用户
提问于 2016-06-14 21:14:41
回答 2查看 1.2K关注 0票数 0

目录结构中有许多文件。我希望使用regexp从这些文件中提取一些字符串(即urls)。

我试过这个:

代码语言:javascript
运行
复制
find . -path "*alder/ * / * .html" -print | xargs sed -n "/http:\/\/[^'\"]*/p" > urls.txt

..。但它并不像预期的那样起作用。find部件工作正常,xargs部件工作正常,但sed部件工作正常,不工作。我在urls.txt中得到的只是所有文件的连接。

EN

回答 2

Unix & Linux用户

发布于 2016-06-14 21:48:24

使用相同的find命令,这将返回与regex匹配的URL:

代码语言:javascript
运行
复制
find . -path "*alder/ * / * .html"  -exec grep -oh "http://[^'\"]*" {} +

find...-print | xargs command...不同,这种方法将适用于名称包含空格或其他困难字符的文件。

-o选项grep告诉它只返回匹配的部分,而不是匹配的行。-h告诉它不要打印找到匹配的文件名。

OP中的find命令只匹配名称在路径中有空格的文件。由于我怀疑这不是您想要的,下面是find命令的另一种形式,它在当前目录的子目录下查找所有.html文件,其名称以alder结尾:

代码语言:javascript
运行
复制
find *alder/ -name '*.html' -exec grep -oh "http://[^'\"]*" {} +

更健壮的方法

为了防止其他类型的坏html文件,cas建议让空格或>也表示URL的结束,同时也接受httpshttp

代码语言:javascript
运行
复制
find . -path "*alder/ * / * .html"  -exec grep -oEh "https?://[^'\"[:space:]>]*" {} +
票数 1
EN

Unix & Linux用户

发布于 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

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/289764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档