UNIX匹配模式和提取

时间:2016-03-11 10:41:02

标签: unix

我是unix的新手。我有一个文件,其中包含网络连接详细信息。我正在尝试使用shell脚本从文件中仅提取主机名和端口号。数据就像这样“(example.easyway.com =(description =(address_list =(protocol = TCP)(主机= 184.43.35.345)(端口= 1234))(=连接端口))“

我有100行这样的连接信息。我只需要提取主机名和端口并将其粘贴到新文件中。任何人都可以指导我这样做吗?

2 个答案:

答案 0 :(得分:0)

对我来说,这看起来像Oracle TNS配置。假设host总是在port之前出现,这个呼唤Perl就会出现这个伎俩

perl -ne 'print "$1:$2\n" if(/host=([\w\.-]+).*port=(\d+)/)' < my-tns-config.txt

如果porthost的顺序无法预测,那么这将有效

perl -ne 'print "$1:$2\n" if(/host=([\w\.-]+).*port=(\d+)|port=(\d+).*host=([\w\.-.]+)/)' < my-tns-config.txt

检查https://regex101.com/https://regexper.com以获取有关这些正则表达式的说明。

微米。

答案 1 :(得分:0)

在Unix中有不同的方法,比如

sed 's/^..\([^=]*\)=.*port=\([^)]*\).*/\1 \2/' file

我认为你不会理解这一点,现在想要更轻松的事情。您可以尝试一些步骤,在每个步骤后进行检查:

cut -d= -f1,7 file | cut -d")" -f1 | cut -c2-

最简单的方法是,当您不熟悉这些工具时,在某个编辑器中打开文件,用空格替换全局字符串=(description=(address_list=(protocol=tcp)(host=(或在编辑器中使用正则表达式),{ {1}}并坐下10分钟编辑100行的剩余部分。