awk 명령 또는 쉘 스크립트를 사용하여 URI 접두사(http:// 및 https://) 제거

awk 명령 또는 쉘 스크립트를 사용하여 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 *;

관련 정보