
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