Shell-Script

使用 awk 命令或 shell 腳本刪除 URI 前綴(http:// 和 https://)

  • May 6, 2020

我有以下數據(實際輸出)

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 ..

需要盡快解決,提前謝謝

@DopeGhoti 已經發布了一個很好的答案。

雖然原始問題在範例數據中只有“http://”和“https://”URI,但問題中包含的發布者的 Awk 腳本似乎表明他們還期望處理 ftp、ftps 和 sftp 方法也是。

因此,這是從 URI 開頭刪除任何方法(包括任何前導空格)的通用答案:

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

這是一個連結,其中包含一些用於實驗的範例輸入:

線上嘗試!

給定名為 的文件中的數據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 *;

引用自:https://unix.stackexchange.com/questions/585013