使用grep/awk从文件中提取服务器名称
我有一个文件,其中有以下模式的多行- 服务器文件-使用grep/awk从文件中提取服务器名称,awk,grep,Awk,Grep,我有一个文件,其中有以下模式的多行- 服务器文件- permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP permit from www.hadooptest.abc.net to www.apz2.abc.net:443/TCP permit from www.hadooptest.abc.net to www.aln.abc.net, www.klm.abc.net:80/TCP, 443/TCP
permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP
permit from www.hadooptest.abc.net to www.apz2.abc.net:443/TCP
permit from www.hadooptest.abc.net to www.aln.abc.net, www.klm.abc.net:80/TCP, 443/TCP
我想拿出一个脚本来提取文件中的所有服务器名称。我已经尝试了grep和awk的多次迭代,但到目前为止还没有找到一种只提取服务器名称的方法。例如,“grep-o'to.*abc.net'Serverfile”给我以下输出-
$ grep -o ' to.*abc.net' Serverfile
to www.ha1.abc.net
to www.apz2.abc.net
to www.aln.abc.net, www.klm.abc.net
我不能在脚本中使用它,因为没有提取单个服务器名称,而且还有一些行具有多个服务器名称,如最后一行的www.aln.abc.net和www.klm.abc.net
谢谢 好的。。。我可能已经找到了答案:)-
您的grep解决方案很好,但会返回两个结果:
$ grep -o '[A-Za-z0-9_\.-]*.abc.net' <<<"permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP"
www.hadooptest.abc.net #You don't want this one
www.ha1.abc.net
或者干脆$sed-r's/(.*to)(www[.].*.abc.net)(.*)/\2/g'
只需更换部件
有什么问题,以避免输出中的左“到”
子字符串?谢谢!这更像是埃尔甘特@欢迎使用168115。如果您对这些解决方案感到满意,您可以单击绿色勾号将其作为答案接受。
$ grep -o '[A-Za-z0-9_\.-]*.abc.net' <<<"permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP"
www.hadooptest.abc.net #You don't want this one
www.ha1.abc.net
$ grep -Po 'to \K[A-Za-z0-9_\.-]*.abc.net' <<<"permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP"
www.ha1.abc.net
$ sed -r 's/(.*to )([A-Za-z0-9_\.-]*.abc.net)(.*)/\2/g' <<<"permit from www.hadooptest.abc.net to www.ha1.abc.net:80/TCP, 443/TCP"
www.ha1.abc.net