Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Linux命令行上的Regex获取部分主机名_Regex_Linux_Shell_Command Line - Fatal编程技术网

通过Linux命令行上的Regex获取部分主机名

通过Linux命令行上的Regex获取部分主机名,regex,linux,shell,command-line,Regex,Linux,Shell,Command Line,我有一个各种域名的列表,与此类似: sssss.stackoverflow.com 111_111.224fr-f222.com ddssd.dd.dd.england.co.uk england.co.uk problematic.co.uk problematic.yy.ru yy.ru 我希望将上面的TLD和子域切掉,以便输出如下所示: stackoverflow 224fr-f222 england england problematic yy yy 我希望在Linux命令行中完成此

我有一个各种域名的列表,与此类似:

sssss.stackoverflow.com
111_111.224fr-f222.com
ddssd.dd.dd.england.co.uk
england.co.uk
problematic.co.uk
problematic.yy.ru
yy.ru
我希望将上面的TLD和子域切掉,以便输出如下所示:

stackoverflow
224fr-f222
england
england
problematic
yy
yy

我希望在Linux命令行中完成此操作。

我有点老派,但我通常使用sed和awk的组合

例如:

$ echo "sss.stackoverflow.com"  | sed  's/\./ /g' |awk '{print $2;}'

stackoverflow
或者,您可以用sed替换.com或.co.uk,只打印最后一个字段,如下所示:

echo "sss.stackoverflow.com" | sed 's/.com/ /g' | sed  's/\./ /g' |awk '{print $NF;}' 

这是为PHP编写的,它是实现您想要的东西的困难的一个例子

下面的正则表达式是一个我从未完成的玩具(宜家没有发送所有组件,呵呵),所以会有太多错误,我很震惊我会发布这样一个不完整的正则表达式,但鉴于愚蠢,让我们试试

您想要的是第一个捕获的组
$1

接下来,除非您正确地修复了正则表达式,否则不要在家里/生产中/任何有意义的地方尝试此操作

最后,由于
yy.ru
不是已注册/有效的tld,因此它对有问题的.yy.ru不起作用:

让我们一起玩:

([a-z0-9_-]+)\.(?:aero|asia|biz|cat|cn|com?|coop|info|int|jobs|mobi|museum|name|net|org|post|pro|tel|travel|xxx|edu|gov|mil|ru)(?:\.(?>a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnorsuvxyz]|d[dejkmoz]|e[ecghrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|o[m]|p[aefghklmnrstwy]|q[a]|r[eosuw]|s[abcdeghij]|u[agkmsyz]))?$
输出 是的,你可以把
yy.ru
加入到混音中,我不打算这样做,因为我想它是无效的

希望这是你认识到这并不像看上去那么容易的一个起点。这将尝试验证,而不仅仅是匹配预设模式

祝你好运,把结果发回来,明天我会有更多的时间回顾:)

明白了! 这将通过linux命令行切断子域和TLD:

echo "world.hello.com" |
sed -r "s/^.*\.([^\.]+)\.co\.[a-z]{2}$/\1/" |
sed -r "s/^([^\.]+)\.co\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.com\.[a-z]{2}$/\1/" |
sed -r "s/^([^\.]+)\.com\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.[a-z]+$/\1/" |
sed -r "s/^([^\.]+)\.[a-z]+$/\1/"
如果要捕获主机名的另一部分,请将括号移到主机名的该部分。肯定会更好,但速度很快,而且

与以下机构合作:
将该列表弹出到一个名为url.txt的文件中,然后将
cat url.txt
导入到SED序列中,您就有了一种测试方法。

第一个想法是使用
cut-d-f2
,或类似产品。但这很复杂。你如何区分
.co.uk
yy.ru
?如果你得到了
co.com
?你应该保留一个域和子域的列表,这样你就可以从字符串中删除它们。剪切定界符是第一个想法,但是是的,我注意到了失败的情况,比如
.co.uk
vs
.yy.ru
它是我无法控制的导入数据,所以它必须在放在一起后进行解析。对于这一套不稳定的条件,似乎一套不稳定的正则表达式可能是最好的选择。先生,您想要薯条吗?(自己动手)在一般情况下,您需要来自的TLD数据库和一个脚本来解析它。已经做过很多次了,;搜索重复项。可能的重复项我认为“problemble.co.uk”等的要点是表明你不能仅仅假设它是字段2…谢谢-编辑了一个更通用的命令的答案(请务必注意之前需要一个反斜杠)。除非你按照@fedorquiLooks的建议保留所有域和子域的列表,就像我得到的一样,与你在这里的目的相似。我还没被允许发布,因为我刚注册。看起来像是这样!!嗯,塞德说字符433无效。我看不到它:<代码>回声回声”子域。子域。域名。com“;sed-r”s/([a-z0-9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9+10 10 10 10::::::::::::::::::::::::::::::::::::航空(航空;亚洲,亚洲,商业,亚洲,商业,商业,商业,猫,猫,商业,商业,猫,猫,猫,中国,猫,猫,cn,猫,猫,cn,猫,猫,cn,猫,猫,中国,猫,猫,猫,猫,猫,cn,猫,猫,猫,猫,猫,猫,猫,cn,中国,猫,猫,猫,猫,猫,中国,中国,网站,网站,网站,网站,网站,网站,网站,网站,网站,网站,网站,回声,网站,回声,b[abdefghijmnorstvwyz]| c[acdfghiklmnorsuvxyz]| d[dejkmoz]| e[ecghrstu]| f[ijkmor]| g[abdefghilmnpqrstuwy]| h[kmnrtu]| I[delmnoqrst]|j[emop]| k[eghimnprwyz]| l[abcikrstuvy]| m[acdeghkmnopqrstuvxyz]| n[acefgilopruz]| o[m]| p[aefghkmnrstwy]| q[a]| r[eosuw]| s[abcdeghij]| u[agkmsyz])?$/\1/“!没错,yy是problemble.yy.com的正确输出。在问题区域中修复了它。如果您使用一个
sed
调用来完成此操作,我可能会向上投票,即使它对许多TLD都失败。
echo "world.hello.com" |
sed -r "s/^.*\.([^\.]+)\.co\.[a-z]{2}$/\1/" |
sed -r "s/^([^\.]+)\.co\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.com\.[a-z]{2}$/\1/" |
sed -r "s/^([^\.]+)\.com\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.[a-z]{2}$/\1/" |
sed -r "s/^.*\.([^\.]+)\.[a-z]+$/\1/" |
sed -r "s/^([^\.]+)\.[a-z]+$/\1/"
sssss.ddddd.com
sss.ddddd.com
ss.ddddd.com
s.ddddd.com
sssss.dd.com
sss.dd.com
ss.dd.com
s.dd.com
sssss.d.com
sss.d.com
ss.d.com
s.d.com
ddddd.com
dd.com
d.com

111111.22222.com
111.222.com
11.22.com
1.2.com
11111.22222.com
111.222.com
11.22.com
1.2.com
11111.22222.com
111.222.com
11.22.com
1.2.com
22222.com
22.com
2.com

sssss.ddddd.co.uk
sss.ddddd.co.uk
ss.ddddd.co.uk
s.ddddd.co.uk
sssss.dd.co.uk
sss.dd.co.uk
ss.dd.co.uk
s.dd.co.uk
sssss.d.co.uk
sss.d.co.uk
ss.d.co.uk
s.d.co.uk
ddddd.co.uk
dd.co.uk
d.co.uk

111111.22222.co.uk
111.22222.co.uk
11.22222.co.uk
1.22222.co.uk
11111.22222.co.uk
111.222.co.uk
11.22.co.uk
1.2.co.uk
11111.22222.co.uk
111.222.co.uk
11.22.co.uk
1.2.co.uk
22222.co.uk
22.co.uk
2.co.uk

sssss.ddddd.ru
sss.ddddd.ru
ss.ddddd.ru
s.ddddd.ru
sssss.dd.ru
sss.dd.ru
ss.dd.ru
s.dd.ru
sssss.d.ru
sss.d.ru
ss.d.ru
s.d.ru
ddddd.ru
dd.ru
d.ru

111111.22222.ru
111.22222.ru
11.22222.ru
1.22222.ru
11111.22222.ru
111.222.ru
11.22.ru
1.2.ru
11111.22222.ru
111.222.ru
11.22.ru
1.2.ru
22222.ru
22.ru
2.ru

sssss.ddddd.info
sss.ddddd.info
ss.ddddd.info
s.ddddd.info
sssss.dd.info
sss.dd.info
ss.dd.info
s.dd.info
sssss.d.info
sss.d.info
ss.d.info
s.d.info
ddddd.info
dd.info
d.info

111111.22222.info
111.22222.info
11.22222.info
1.22222.info
11111.22222.info
111.222.info
11.22.info
1.2.info
11111.22222.info
111.222.info
11.22.info
1.2.info
22222.info
22.info
2.info

sssss.ddddd.information
sss.ddddd.information
ss.ddddd.information
s.ddddd.information
sssss.dd.information
sss.dd.information
ss.dd.information
s.dd.information
sssss.d.information
sss.d.information
ss.d.information
s.d.information
ddddd.information
dd.information
d.information

111111.22222.information
111.222.information
11.22.information
1.2.information
11111.22222.information
111.222.information
11.22.information
1.2.information
11111.22222.information
111.222.information
11.22.information
1.2.information
22222.information
22.information
2.information

sssss.ddddd.i
sss.ddddd.i
ss.ddddd.i
s.ddddd.i
sssss.dd.i
sss.dd.i
ss.dd.i
s.dd.i
sssss.d.i
sss.d.i
ss.d.i
s.d.i
ddddd.i
dd.i
d.i

111111.22222.i
111.22222.i
11.22222.i
1.22222.i
11111.22222.i
111.22.i
11.22.i
1.2.i
11111.22222.i
111.222.i
11.22.i
1.2.i
22222.i
22.i
2.i

sss_dd-main.ddddd.i
sss_ddddd.dd-main.i