Benutzer-Werkzeuge

Webseiten-Werkzeuge


sed

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
sed [2013-10-14 12:12:58] manfredsed [2020-02-19 17:09:51] (aktuell) manfred
Zeile 1: Zeile 1:
 +===== 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
 +