SED
mit SED alles in Großbuschtaben umwandeln:
# echo "buchstaben" | sed -e 's/.*/\U&/g' BUCHSTABEN
mit SED alles in Kleinbuschtaben umwandeln (funktioniert mit Linux, leider nicht mit FreeBSD):
# echo "BUCHSTABEN" | sed -e 's/.*/\L&/g' buchstaben
alle Leerzeilen löschen:
# cat [Datei] | sed -e "/^$/d"
Zeilen mit einem bestimmten Inhalt (PATTERN) löschen:
# cat [Datei] | sed -e "/$PATTERN/d"
Zeilen mit einem bestimmten Inhalt (PATTERN) ausgeben:
# cat [Datei] | sed -ne "/$PATTERN/p"
zum Beispiel damit der Benutzer "www-data" "/bin/sh" nicht mehr ausführen kann:
# sed -ie "/www-data ALL=(ALL) NOPASSWD: [/]bin[/]sh/d" /etc/sudoers
Zu beachten ist hier, dass das "/" am Anfang und am Ende als Begrenzung des PATTERN stehen muss. Hier kann man das nicht einfach gegen ein anderes Begrenzungszeichen austauschen (leider).
Alles zwischen der ersten und zweiten Leerzeile anzeigen:
# cat [Datei] | sed -e '1,/^$/ d' -e '/^$/ p' # cat [Datei] | sed -e '1,/^$/ d;/^$/ p'
Alles von "# Beginn" bis "# Ende" wird aus der Datei entfernt:
# sed -i -e '/^# Beginn/,/^# Ende/ d' /pfad/datei.txt
Alles von "# Blockanfang" bis Dateiende wird aus der Datei entfernt:
# sed -ie '/# Blockanfang/,// d' /pfad/datei.txt
sed arbeitet strikt Zeilenorientiert, die Zeilenumbrüche sind dort immer das Zeichen den Zeilenbuffer jetzt zu bearbeiten, und sind aus diesem Grunde mit sed alleine nur äußerst umständlich zu entfernen.
In der man-Page steht dazu folgendes:
The escape sequence \n matches a newline character embedded in the pattern space. You can't, however, use a literal newline character in an address or in the substitute command.
Eine solche umständliche Methode zeige ich mal Beispielhaft hier:
# cat [viele Zeilen] | sed -e 'H; $blable; d; :lable; g; s/\n/ /g' > [Zeilenumbrüche sind jetzt Leerzeichen]
unter der ersten Leerzeile in der Datei "/etc/crontab" soll MAILTO="" eingefühgt werden:
POS="$(($(cat /etc/crontab | sed -ne "1,/^$/ p" | wc -l) + 1))" # Zeilennummer für "die ersten Leerzeile in der Datei" ermitteln
cat /etc/crontab | sed -e "${POS} i\MAILTO=\"\"" # Zeile einfühgen
