全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 916|回复: 10

[Windows VPS] shell里如何输出正则命中的字符?

[复制链接]
发表于 2019-8-29 10:26:29 | 显示全部楼层 |阅读模式
文本如下:
                            <td><a href="/AS714/17.100.0.0/16" title="Apple Inc.">17.100.0.0/16</a> </td>
                            <td><a href="/AS714/17.102.0.0/15" title="Apple Inc.">17.102.0.0/15</a> </td>
                            <td><a href="/AS714/17.104.0.0/15" title="Apple Inc.">17.104.0.0/15</a> </td>
                            <td><a href="/AS714/17.106.0.0/15" title="Apple Inc.">17.106.0.0/15</a> </td>
                            <td><a href="/AS714/17.108.0.0/15" title="Apple Inc.">17.108.0.0/15</a> </td>
                            <td><a href="/AS714/17.110.0.0/15" title="Apple Inc.">17.110.0.0/15</a> </td>
                            <td><a href="/AS714/17.110.64.0/18" title="Apple Inc.">17.110.64.0/18</a> </td>
然后我的正则表达式是:(?<=.">)(.+)(?=</a)
在notepad++中可以正确提取出17.100.0.0./16等等这些中间的字符
这个数据在一个apple.txt中,shell脚本怎么才能输出这些字符到一个另一个txt中?谢谢!
试过grep -E 、awk -F都提示脚本错误。

wget xx.com/apple.txt
cat apple.txt
grep -E '(?<=.">)(.+)(?=</a)'
??
发表于 2019-8-29 10:51:08 | 显示全部楼层
  1. grep -o -E '[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\/[[:digit:]]+' test.txt  > out.text
复制代码
 楼主| 发表于 2019-8-29 10:55:07 | 显示全部楼层


大佬,我知道你想用IP地址去匹配,但是后面有IPv6地址呢。能不能还用我上面的前后字符匹配法来写!谢谢!

<td><a href="/AS714/2620:149:5e1::/48" title="Apple Inc.">2620:149:5e1::/48</a> </td>
                            <td><a href="/AS714/2620:149:a01::/48" title="Apple Inc.">2620:149:a01::/48</a> </td>
                            <td><a href="/AS714/2620:149:a07::/48" title="Apple Inc.">2620:149:a07::/48</a> </td>
                            <td><a href="/AS714/2620:149:a0b::/48" title="Apple Inc.">2620:149:a0b::/48</a> </td>
                            <td><a href="/AS714/2620:149:a11::/48" title="Apple Inc.">2620:149:a11::/48</a> </td>
                            <td><a href="/AS714/2620:149:a13::/48" title="Apple Inc.">2620:149:a13::/48</a> </td>
                            <td><a href="/AS714/2620:149:a15::/48" title="Apple Inc.">2620:149:a15::/48</a> </td>
                            <td><a href="/AS714/2620:149:a17::/48" title="Apple Inc.">2620:149:a17::/48</a> </td>
                            <td><a href="/AS714/2620:149:a19::/48" title="Apple Inc.">2620:149:a19::/48</a> </td>
                            <td><a href="/AS714/2620:149:a1b::/48" title="Apple Inc.">2620:149:a1b::/48</a> </td>
这样就IPv4地址正则匹配不到了
发表于 2019-8-29 10:57:49 | 显示全部楼层
  1. grep -o -E '([0-9]{1,3}\.)+[0-9]+/[0-9]+' test.txt | uniq
复制代码
 楼主| 发表于 2019-8-29 11:06:03 | 显示全部楼层
尝试sed -e 's/.">\(.*\)</a>/\1/'
提示bad option in substitution expression
是我的.">和</a>正则元字符冲突了吗
发表于 2019-8-29 11:20:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2019-8-29 11:20:25 | 显示全部楼层
正则我是不会的,换个思路嘛,把 Apple Inc."> 跟</a>中间的东西取出来~~
读一行,awk 1下,接着awk第2下,echo结束,继续下一行。
发表于 2019-8-29 11:23:05 来自手机 | 显示全部楼层
扒bgp.he.net
发表于 2019-8-29 11:23:05 | 显示全部楼层
aricmjj6 发表于 2019-8-29 11:06
尝试sed -e 's/.">\(.*\)/\1/'
提示bad option in substitution expression
是我的.">和正则元字符冲突了吗 ...

s后面的‘/’ 和表达式中的 '/' 重复,换个不一样的就好了,sed 's|.">\(.*\)</a>|\1|'
 楼主| 发表于 2019-8-29 12:09:42 | 显示全部楼层
老刘头很铁 发表于 2019-8-29 11:20
着急去吃饭,大概瞎写了一个

能发一下吗!!!!谢谢老哥!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-25 23:20 , Processed in 0.060680 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表