
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