使用 awk 命令或 shell 脚本删除 URI 前缀(http:// 和 https://)

使用 awk 命令或 shell 脚本删除 URI 前缀(http:// 和 https://)

我有以下数据(实际输出)

http://localhost:5058/uaa/token,80
https://t-mobile.com,443
http://USERSECURITYTOKEN/payments/security/jwttoken,80
https://core.op.api.internal.t-mobile.com/v1/oauth2/accesstoken?grant_type,443
http://AUTOPAYV3/payments/v3/autopay/search,80
http://AUTOPAYV3/payments/v3/autopay,80
http://CARDTYPEVALIDATION/payments/v4/internal/card-type-validation/getBinDetails,80

我正在尝试获取以下数据(预期输出)

localhost:5058/uaa/token,80
t-mobile.com,443
USERSECURITYTOKEN/payments/security/jwttoken,80
core.op.api.internal.t-mobile.com/v1/oauth2/accesstoken?grant_type,443
AUTOPAYV3/payments/v3/autopay/search,80
AUTOPAYV3/payments/v3/autopay,80
CARDTYPEVALIDATION/payments/v4/internal/card-type-validation/getBinDetails,80

并希望将工作命令与以下脚本结合起来

#!/bin/bash
for file in $(ls); 
do 
#echo  " --$file -- "; 
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|\.endpoint)' $file|grep '^[^#]' |awk '{split($0,a,"#"); print a[1]}'|awk '{split($0,a,"="); print a[1],a[2]}'|sed 's/^\|#/,/g'|awk '/http:\/\//  {print $2,80}
       /https:\/\// {print $2,443}
       /Points/     {print $2,"9042"}
       /host/       {h=$2}
       /port/       {print h,$2; h=""}'|awk -F'[, ]' '{for(i=1;i<NF;i++){print $i,$NF}}'|awk 'BEGIN{OFS=","} {$1=$1} 1'|sed '/^[0-9]*$/d'|awk -F, '$1 != $2' 
done |awk '!a[$0]++' 
#echo "Done."
stty echo
cd ..

需要尽快解决,谢谢

答案1

@DopeGhoti 已经发布了一个很好的答案。

虽然原始问题的示例数据中只有“http://”和“https://”URI,但问题中包含的发帖人的 Awk 脚本似乎表明他们还期望处理 ftp、ftps 和 sftp 方法以及。

因此,这里有一个从 URI 开头删除任何方法(包括任何前导空格)的通用答案:

sed -E 's/^\s*.*:\/\///g'

这是一个包含一些用于实验的示例输入的链接:

在线尝试一下!

答案2

input给定名为,的文件中的数据sed

$ sed -E 's_^https?://__' input
localhost:5058/uaa/token,80
t-mobile.com,443
USERSECURITYTOKEN/payments/security/jwttoken,80
core.op.api.internal.t-mobile.com/v1/oauth2/accesstoken?grant_type,443
AUTOPAYV3/payments/v3/autopay/search,80
AUTOPAYV3/payments/v3/autopay,80
CARDTYPEVALIDATION/payments/v4/internal/card-type-validation/getBinDetails,80

另外,关于

for file in $(ls); 

不要解析 的输出ls,你会很难过。反而,

for file in *;

相关内容