updated:  2024 21. March
published:  2020 28. August

sed

Der Streameditor - sed -

Zum Suchen verwendet der Zeileneditor reguläre Ausdrücke. Es existieren auch Internetseiten um reguläre Ausdrücke zu testen.

Suchen und ersetzen


 sed 's/ *//g'		 # Alle Leerzeichen entfernen
 sed 's/  */ /g'	 # Mehrfachleerzeichen ersetzen durch ein einzelnes Leerzeichen
 sed 's/ \+/\ /g'	 # Mehrfachleerzeichen ersetzen durch ein einzelnes Leerzeichen
 sed 's/^[[:space:]]*//' # Alle Leerzeichen und Tabulatoren zu Beginn einer Zeile löschen (Beachte ohne /g = global)
 sed '/meta/s/A/b/'	 # Sucht alle Zeilen mit "meta" und ersetzt in diesen Zeilen A mit b 
   

Hier gibt’s weitere Referenzen .

Reguläre Ausdrücke und Wiederholungen

Ein kleiner aber vielleicht wichtiger Ausflug in die Welt der regulären Ausdrücke. Ein regulärer Ausdruck (engl.: Regular expressions) ist die Beschreibung einer bestimmten Menge von Zeichen in einer Folge. Wiederholungen von regulären Ausdrücken (kurz RE) werden mit den folgenden Zeichen (Platzhaltern) verarbeitet:

Platzhalter Beschreibung
* der RE kommt null oder mehrfach vor
\+ der RE kommt mindestens ein oder mehrfach vor
\? der RE kommt null oder mindenstens einmal vor
. ein beliebiges Zeichen

Hinweis: Die Platzhalter + und ? müssen maskiert werden.

Styles aus HTML-Seiten entfernen

In alten Html-Seiten sind Styles meisten direkt in einem Html-Element integriert. Zum Beispiel:


 <th style="border-bottom: 0.5pt solid ;  font-weight:normal;" rowspan="2" align="center" valign="middle" charoff="50">Text</th>
   

Das ist heute nicht mehr erwünscht und wird mit CSS gelöst. Deshalb kann es notwendig sein, die entsprechenden Codezeilen zu entfernen.


 sed -re 's/style\=\"[[:alnum:][:space:]\:\.\;\-]*\"//g' input.html > output.html
   

Erläuterung:

Der regulare Ausdruck style\=\"[[:alnum:][:space:]\:\.\;\-]*\" beschreibt, dass alles zwischen der Zeichenfolge style=" und dem darauffolgenden ersten Anführungszeichen " angesprochen wird. In der Tabelle sind nochmal alle regulären Ausdrücke aufgeführt, wobei einige mit einem Backslash \ maskiert sind.

Beschreibung der einzelnen Ausdrücke
RegExp Characters
[:alnum:] alphanumeric [0-9A-Za-z]
[:space:] whitespace [\t\n\v\f\r ]
\: Doppelpunkt (maskiert)
\. Punkt (maskiert)
\; Semikolon (maskiert)
\- Minuszeichen (maskiert)

Das Ganze wird in eine eckige Klammer eingepackt und mit Sternchen versehen: [[:alnum:][:space:]\:\.\;\-]*. Das bedeutet, dass alles mehrfach vorkommen kann.

Weitere Beispiele

RegExp Beschreibung
border-right:[[:alnum:][:space:].]*\; alle alphanummeric und whitespace zw. border-right und ;
border-bottom:[[:alnum:][:space:].]*; alles zw. border-bottom und ;
font-weight:[[:alnum:][:space:].]*; alles zw. font-weight und ;
style="[[:space:]]*" style=" "

Zum Abschluß ein paar Codezeilen um allen möglichen Käse aus HTML-Dateien zu entfernen.


 sed 	\
	-re 's/ style\=\"[[:alnum:][:space:]\:\.\;\-]*\"//g' \
	-re 's/ align\=\"[[:alnum:][:space:]]*\"//'   	     \
	-re 's/ valign\=\"[[:alnum:][:space:]]*\"//'   	     \
	-re 's/ charoff\=\"[[:alnum:][:space:]]*\"//'        \
	-re 's/<t([[:alnum:]]) [[:space:]]*>/<t\1>/' 	     \   # entfernt whitespace in <t? >
	-re 's/<\/?span[[:space:]]*>//g' 		     \   # entfernt <span > aber auch <\span>
	\
	input.html > output.html

   

cleanhtml

Nachfolgend ein Skript um die Struktur einer Html-Datei zu verändern. Das Skript strukturiert eine Html-Datei um, indem es:

  1. HTML-Elemente in eine neue Zeile versetzt
  2. HTML-Elemente teilweise nach rechts verschiebt
  3. Leerraum (whitespace) am Beginn einer Zeile löscht
  4. Das Html-Element <span> </span> löscht, aber nicht deren Inhalt.
  5. Teilw. Eigenschaften innerhalb eines Elements löscht, wie z.B.: style align valign charoff
Bashscript: cleanhtml.sh

#!/bin/bash

# cleanhtml.sh 
# Das Skript strukturiert eine Html-Datei um, indem es:
# 1. HTML-Elemente in eine neue Zeile versetzt
# 2. HTML-Elemente teilweise nach rechts verschiebt
# 3. Leerraum (whitespace) am Beginn einer Zeile löscht
# 4. Das Html-Element <span> </span> löscht, aber nicht der Inhalt.
# 5. Teilw. Eigenschaften innerhalb eines Elements löscht, wie z.B.:
#	style align valign charoff 

declare inputfile=$1;
declare outfile;
declare tmpfile;

# Prüft Eingabedatei
if [ -z $inputfile ] || [ ! -f $inputfile ]; then
	echo -e "\n\tKeine reguläre Datei.";
	exit;
fi

tmpfile=$(mktemp atemp.XXXX);

# Erzeugt Ausgabedatei wie Eingabedatei + Temporäre Zeichen
outfile=$(mktemp ${inputfile%.*}.out.XXX.${inputfile##*.})
#echo $outfile;

# Alle Zeilenumbrüch löschen
tr -d '\r\n' < $inputfile > $tmpfile

sed 	\
	-re 's/^[[:space:]]*</</g' \
	-re 's/<html/\n<html/g' \
	-re 's/<\/html/\n<\/html/g' \
	-re 's/<body/\n<body/g' \
	-re 's/<\/body/\n<\/body/g' \
	-re 's/<head/\n<head/g' \
	-re 's/<\/head/\n<\/head/g' \
	-re 's/<meta/\n\t<meta/g' \
	-re 's/<title/\n\t<title/g' \
	-re 's/<link/\n\t<link/g' \
	-re 's/<\/meta/\n\t<\/meta/g' \
	-re 's/<table/\n\n\n<table/g' \
	-re 's/<\/table/\n<\/table/g' \
	-re 's/<tbody/\n<tbody/g' \
	-re 's/<\/tbody/\n<\/tbody/g' \
	-re 's/<tr/\n\t<tr/g' \
	-re 's/<\/tr/\n\t<\/tr/g' \
	-re 's/<td/\n\t\t<td/g' \
	-re 's/<th /\n\t\t<th /g' \
	-re 's/<thead/\n<thead/g' \
	-re 's/<\/thead/\n<\/thead/g' \
	-re 's/<t([[:alnum:]]) [[:space:]]*>/<t\1>/' \
	-re 's/<colgroup/\n\t<colgroup/g' \
	-re 's/<div/\n\t<div/g' \
	-re 's/<\/div/\n\t<\/div/g' \
	-re 's/ style\=\"[[:alnum:][:space:]\:\.\;\-]*\"//g'   \
	-re 's/ align\=\"[[:alnum:][:space:]]*\"//g'   	\
	-re 's/ valign\=\"[[:alnum:][:space:]]*\"//g'   \
	-re 's/ charoff\=\"[[:alnum:][:space:]]*\"//g'   \
	-re 's/<\/?span[[:space:]]*>//g' \
	\
	$tmpfile > $outfile

rm $tmpfile

Stichworte (tags)