일치하는 URL을 한 줄에서 찾아 도메인 이름으로 줄이세요.

일치하는 URL을 한 줄에서 찾아 도메인 이름으로 줄이세요.

스크립트를 작성 중인 로그 파일이 있으므로 출력의 특정 필드만 표시됩니다. 마지막으로 필요한 것은 ".com", ".edu", ".org" 등을 쳤을 때 줄이 멈추도록 URL을 줄이는 것입니다. grep을 사용하여 이를 수행할 수 있는 방법이 있습니까? 찾아야 할 다른 명령이 있습니까?

예시 출력은 다음과 같습니다:

student1234 "GET https://www.noname.com:443/login"
student4567 "GET http:// www.noip.edu:80/start/noname"
student8901 "GET http:// www.testing.org:80/search/change"

나에게 필요한 것은:

student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

답변1

선택의 여지가 많으니 마음에 드는 것을 선택하세요.

사용 grep:

grep -o '^[^:]\+:[^:]\+' file.txt

사용 cut:

cut -d: -f1-2 file.txt

사용 awk:

awk -F: '{ print $1$2 }' file.txt

사용 sed:

sed 's/^\([^:]\+:[^:]\+\).*/\1/' file.txt

쉘 사용:

while IFS=: read -r i j k; do echo "$i$j"; done <file.txt

사용 perl:

perl -pe 's/^([^:]+:[^:]+).*/$1/' file.txt

예:

$ grep -o '^[^:]\+:[^:]\+' file.txt
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ cut -d: -f1-2 file.txt                                                
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ awk -F: '{ print $1$2 }' file.txt                 
student1234 "GET https//www.noname.com
student4567 "GET http// www.noip.edu
student8901 "GET http// www.testing.org

$ sed 's/^\([^:]\+:[^:]\+\).*/\1/' file.txt            
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ while IFS=: read -r i j k; do echo "$i$j"; done <file.txt
student1234 "GET https//www.noname.com
student4567 "GET http// www.noip.edu
student8901 "GET http// www.testing.org

$ perl -pe 's/^([^:]+:[^:]+).*/$1/' file.txt
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

관련 정보