我正在将执行结果保存在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
p.S.在每个块中添加next
可以防止一些问题。。。