Shell-Script
使用 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 ..
需要盡快解決,提前謝謝
@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 *;