encontre URLs correspondentes em uma linha e encurte-os para o nome de domínio

1

Eu tenho um arquivo de log que eu estou escrevendo um script por isso só mostra certos campos de saída. O último bit que eu preciso é encurtar a URL para que ela pare a linha quando eles apertarem ".com", ".edu", ".org" e assim por diante. Existe uma maneira de fazer isso com o grep? Eu deveria estar olhando para outros comandos?

O exemplo de saída é:

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"

O que eu preciso é:

student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org
    
por sudo_maas 17.05.2016 / 15:05

1 resposta

3

Tantas opções, escolha a que você gosta.

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/^\([^:]\+:[^:]\+\).*//' file.txt

usando o shell:

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

usando perl :

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

Exemplo:

$ 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/^\([^:]\+:[^:]\+\).*//' 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
    
por 17.05.2016 / 15:37