regex 在bash脚本中使用正则表达式选择镜像[重复]

4smxwvx5  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(103)

此问题在此处已有答案

Is it possible to do an OR in a bash regular expression?(1个答案)
昨天就关门了。
我尝试从https://mirrors.slackware.com/mirrorlist/获取镜像列表。我有一个regex语句,可以获取所有服务器的列表(http://[a-zA-Z 0 -9-./]*),但我正在尝试找到一种方法,可以仅从特定国家/地区代码(us、ca等)中选择服务器。
我是regex的新手,所以这可能是我很容易忽略的事情。我试过如果|然后陈述,但没有运气。任何帮助将不胜感激。我已经做了很多搜索,以防万一这是一个重复的另一个问题。
我不知道他们说的与我的相似的重复是如何适用的。那是关于bash中的if语句,而不是下载和解析我所要求的信息。

kuarbcqp

kuarbcqp1#

有更有效和优雅的方法来做到这一点,但考虑这是一个关于 *nix命令行有效性的小教程:

grep https: mirrors.lst | grep -E '^(us|se)' | sed -n 's/^.*=//;s:.*[>]/::;s:[<]/a[>]::;s:^.*[/][>]::p'

字符串

输出

https://ftp.acc.umu.se/mirror/slackware.com/
https://ftpmirror.infania.net/slackware/
https://dfw.mirror.rackspace.com/slackware/
https://ftp.ussg.indiana.edu/linux/slackware/
https://mirror.cs.princeton.edu/pub/mirrors/slackware/
https://mirror.fcix.net/slackware/
https://mirror.slackbuilds.org/slackware/
https://mirror2.sandyriver.net/pub/slackware/
https://mirrors.kernel.org/slackware/
https://mirrors.ocf.berkeley.edu/slackware/
https://mirrors.syringanetworks.net/slackware/
https://mirrors.xmission.com/slackware/
https://plug-mirror.rcac.purdue.edu/slackware/


要获取额外的方案,可以使用grepExtended RegExp 特性和-E标志,即

grep -E 'ftp:|http:|https:|PUBLIC:|rsync:|xml:' mirrors.lst | grep -E '^(us|se)' | sed -n 's/^.*=//;s:.*[>]/::;s:[<]/a[>]::;s:^.*[/][>]::p'


Tnx到@Reilas的提示!
你必须将第二个grep目标更改为你想要过滤的任何/所有国家代码的列表。用|字符分隔每个值,如下所示。
如果有什么东西停止工作了,那么从左到右执行管道的每一部分,直到你看到问题在哪里。

g0czyy6m

g0czyy6m2#

  • ".我试图找到一种方法来选择只从一个特定的国家代码(美国,加州等)。

我是正则表达式的新手,所以这可能是我忽略的非常容易的事情。
使用 * 非捕获组 *,语法为(?: )
这是一个 * 捕获模式 *。

(?:^(?:us|ca)).+?(http://[^\s]+)

个字符
值得注意的是,还有其他的 * scheme *,即 httpsftprsync

(?:^(?:us|ca)).+?(\S+?://[^\s]+)
https://mirror.csclub.uwaterloo.ca/slackware/
https://mirror.its.dal.ca/slackware/
https://dfw.mirror.rackspace.com/slackware/
https://ftp.ussg.indiana.edu/linux/slackware/
https://mirror.cs.princeton.edu/pub/mirrors/slackware/
https://mirror.fcix.net/slackware/
https://mirror.slackbuilds.org/slackware/
https://mirror2.sandyriver.net/pub/slackware/
https://mirrors.kernel.org/slackware/
https://mirrors.ocf.berkeley.edu/slackware/
https://mirrors.syringanetworks.net/slackware/
https://mirrors.xmission.com/slackware/
https://plug-mirror.rcac.purdue.edu/slackware/
http://ftp.slackware.com/pub/slackware/
http://mirror.lug.udel.edu/pub/slackware/
http://slackblog.com/slackware/
http://slackware.absolutehosting.net/pub/slackware/
http://slackware.cs.utah.edu/pub/slackware/
http://slackware.mirrors.tds.net/pub/slackware/
ftp://mirror.csclub.uwaterloo.ca/slackware/
ftp://mirror.its.dal.ca/slackware/
ftp://dfw.mirror.rackspace.com/slackware/
ftp://ftp.lug.udel.edu/pub/slackware/
ftp://ftp.slackware.com/pub/slackware/
ftp://ftp.ussg.indiana.edu/linux/slackware/
ftp://mirror.cs.princeton.edu/pub/mirrors/slackware/
ftp://mirror.slackbuilds.org/pub/slackware/
ftp://mirrors.syringanetworks.net/slackware/
ftp://mirrors.xmission.com/slackware/
ftp://plug-mirror.rcac.purdue.edu/slackware/
ftp://slackware.absolutehosting.net/pub/slackware/
ftp://slackware.cs.utah.edu/slackware/
ftp://slackware.mirrors.tds.net/
rsync://mirror.csclub.uwaterloo.ca/slackware/
rsync://mirror.its.dal.ca/slackware/
rsync://dfw.mirror.rackspace.com/slackware/
rsync://ftp.slackware.com/slackware/
rsync://ftp.ussg.indiana.edu/slackware/
rsync://mirror.cs.princeton.edu/slackware/
rsync://mirror.fcix.net/slackware/
rsync://mirror.slackbuilds.org/slackware/
rsync://mirror2.sandyriver.net/pub/slackware/
rsync://mirrors.kernel.org/slackware/
rsync://mirrors.ocf.berkeley.edu/slackware/
rsync://mirrors.syringanetworks.net/slackware/
rsync://mirrors.xmission.com/slackware/
rsync://plug-mirror.rcac.purdue.edu/slackware/
rsync://rsync.lug.udel.edu/slackware/
rsync://slackblog.com/slackware/
rsync://slackware.absolutehosting.net/slackware/
rsync://slackware.cs.utah.edu/slackware/
rsync://slackware.mirrors.tds.net/slackware/

的字符串
最后,WikipediaO'Reilly Media 都提供了关于 * 正则表达式 * 的优秀文本。

相关问题