나는 다음과 같은 데이터를 가지고 있습니다 (실제 출력)
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 *;