我是unix的新手。我有一个文件,其中包含网络连接详细信息。我正在尝试使用shell脚本从文件中仅提取主机名和端口号。数据就像这样“(example.easyway.com =(description =(address_list =(protocol = TCP)(主机= 184.43.35.345)(端口= 1234))(=连接端口))“
我有100行这样的连接信息。我只需要提取主机名和端口并将其粘贴到新文件中。任何人都可以指导我这样做吗?
答案 0 :(得分:0)
对我来说,这看起来像Oracle TNS配置。假设host
总是在port
之前出现,这个呼唤Perl就会出现这个伎俩
perl -ne 'print "$1:$2\n" if(/host=([\w\.-]+).*port=(\d+)/)' < my-tns-config.txt
如果port
和host
的顺序无法预测,那么这将有效
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行的剩余部分。