busque las URL coincidentes en una línea y luego acórtelas al nombre de dominio

busque las URL coincidentes en una línea y luego acórtelas al nombre de dominio

Tengo un archivo de registro para el que estoy escribiendo un script, por lo que solo muestra ciertos campos de salida. Lo último que necesito es acortar las URL para que detenga la línea cuando presionen ".com", ".edu", ".org", etc. ¿Hay alguna manera de hacer esto con grep? ¿Debería buscar otros comandos?

El resultado del ejemplo es:

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"

Lo que necesito es:

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

Respuesta1

Hay tantas opciones, elige la que más te guste.

Usando grep:

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

usando cut:

cut -d: -f1-2 file.txt

usando awk:

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

usando sed:

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

usando cáscara:

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

usando perl:

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

Ejemplo:

$ 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

información relacionada