Benutzer-Werkzeuge

Webseiten-Werkzeuge

A PCRE internal error occured. This might be caused by a faulty plugin

sed

===== 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

sed.txt · Zuletzt geändert: 2020/02/19 18:09 von manfred