bash - 如何在excel表中保存默认端口和相应的端口
问题描述
我正在将执行结果保存在excel表中,结果如下所示
domainurl http://example.com/
token.uri https://example.com/
endpoint https://example.com/
Points 10.15.13.18,10.13.13.26,10.15.13.4
host 10.15.19.21#10.5.17.2
port 8080#8080
host 10.3.4.16
port 1400
Points 10.35.13.18,10.35.23.16,10.115.13.14
host abcd0001.unix.sty300.org
port 22
我想看到这样的结果
|A |B
http://example.com/ 80
https://example.com/ 443
https://example.com/ 443
10.15.13.18,10.13.13.26,10.15.13.4 N/A
10.15.19.21,10.5.17.2 8080
10.3.4.16 1400
10.35.13.18,10.35.23.16,10.115.13.14 N/A
abcd0001.unix.sty300.org 22
注意:如果是 https 或 http 的端口应该默认为 443 或 80,而 N/A 表示没有端口。
这是我厌倦的代码
grep -P '((?<=[^0-9.]|^)[1-9][0-9]{0,2}(\.([0-9]{0,3})){3}(?=[^0-9.]|$)|(http|ftp|https|ftps|sftp)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/+#-]*[\w@?^=%&/+#-])?|\.port|\.host|contact-points|\.uri)' $file | grep '^[^#]' | awk '{split($0,a,"="); print a[1],a[2]}' | awk '
BEGIN{
#print "Filename hostname port"
}
/:[0-9]+/{
sub(/:/,"\t")
print;
next
}
NF==2{
if($NF~/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ || $NF~/[a-zA-Z,]+\..*\.[a-zA-Z,]+$/){
val=$0
}
else{
if(val){
print val,$NF
val=""
}
}
}'
感谢您的建议
解决方案
与此输入一起工作的脆弱awk
脚本
$ awk '/http:\/\// {print $2,80}
/https:\/\// {print $2,443}
/Points/ {print $2,"NA"}
/host/ {h=$2}
/port/ {print h,$2; h=""}' file | column -t
http://example.com/ 80
https://example.com/ 443
https://example.com/ 443
10.15.13.18,10.13.13.26,10.15.13.4 NA
10.15.19.21#10.5.17.2 8080#8080
10.3.4.16 1400
10.35.13.18,10.35.23.16,10.115.13.14 NA
abcd0001.unix.sty300.org 22
PSnext
在每个块中添加一个可以防止一些问题...
推荐阅读
- json - JSON中的意外字符串在位置
通过邮递员寄送尸体 - android - “反应原生链接反应原生声音”不起作用
- javascript - 如何制作一个函数,在javascript中按降序排序并返回数组中重复次数最多的值?
- php - 为我的 CMS 解密或加密 rijndael 哈希时出现问题,这是 php 中的源代码
- reactjs - React 代理,服务器响应状态为 404 (Not Found)
- gremlin - 海王星小精灵中的排序(排序)非常慢
- r - 未生成图例或生成错误地分配给数据
- html - 角度旋转木马,旋转木马内的点击事件未按预期工作
- sql-server - 多列分组
- arrays - 一维数组变成二维数组VBA