首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用新的/中断行对文件中的文本进行grep

如何使用新的/中断行对文件中的文本进行grep
EN

Stack Overflow用户
提问于 2019-03-20 22:28:52
回答 1查看 125关注 0票数 0

我必须用下面的内容解析多个文件的内容:

代码语言:javascript
复制
style=3D""><a href=3D"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ" style=3D"color:#3b599

我必须提取https链接,但我的grep命令不能忽略新行return,并以中继结果结束:

命令

代码语言:javascript
复制
grep -r -m1 -oh "https://123456789.com/accounts/confirm_email*\s*[^ ]*" /folder/

结果

代码语言:javascript
复制
https://123456789.com/accounts/confirm_email/19AbCDx=

DESIDERED结果

代码语言:javascript
复制
https://123456789.com/accounts/confirm_email/19AbCDx=K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1MjkwODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ

PS:'=‘字符不是(总是)链接的一部分,但在换行时它是文件的格式。

注意:https://123456789.com/accounts/confirm_email/是链接在所有文件中重复的唯一常量。

如果我添加-z选项,-m1选项被忽略,结果是:

代码语言:javascript
复制
https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"

如果我在命令后面添加|head -3,但最后一行重复了http

命令

代码语言:javascript
复制
grep -r -oh -z "https://123456789.com/accounts/confirm_email*\s*[^ ]*" /folder/ |head-3

https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"https://123456789.com/accounts/confirm_email/19AbCDx=

我怎么能排除它呢?

EN

回答 1

Stack Overflow用户

发布于 2019-03-20 22:47:07

man grep

代码语言:javascript
复制
-z, --null-data
       Treat  the  input  as  a set of lines, each terminated by a zero
       byte (the ASCII NUL character) instead of a newline. - -

所以:

代码语言:javascript
复制
$ grep -z -r -m1 -oh "https://123456789.com/accounts/confirm_email*\s*[^ ]*" file

输出:

代码语言:javascript
复制
https://123456789.com/accounts/confirm_email/19AbCDx=
K/bWFyY29A1234529zYW50dWNjaS5ldQ/?app_redirect=3DFalse&amp;ndid=3DHMTU1Mjk=
wODY5OTA1MDk2NTptYXJjb0BtYXJjb3NhbnR1Y2NpLmV1Ojg1OQ"

换行符仍然存在,但您可以使用tr -d \\n删除它们

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

https://stackoverflow.com/questions/55263189

复制
相关文章

相似问题

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