passende URLs in einer Zeile finden und dann auf den Domänennamen kürzen

passende URLs in einer Zeile finden und dann auf den Domänennamen kürzen

Ich habe eine Protokolldatei, für die ich ein Skript schreibe, damit nur bestimmte Ausgabefelder angezeigt werden. Als letztes muss ich die URLs so kürzen, dass die Zeile angehalten wird, wenn sie auf „.com“, „.edu“, „.org“ usw. stoßen. Gibt es eine Möglichkeit, dies mit grep zu tun? Sollte ich nach anderen Befehlen suchen?

Die Beispielausgabe lautet:

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"

Was ich brauche ist:

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

Antwort1

So viele Optionen. Wählen Sie die aus, die Ihnen gefällt.

Verwendung von grep:

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

mit cut:

cut -d: -f1-2 file.txt

mit awk:

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

mit sed:

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

Shell verwenden:

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

mit perl:

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

Beispiel:

$ 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

verwandte Informationen