Ich arbeite an einer Aufgabe, für die SED das vorgesehene Werkzeug ist. Die Aufgabe besteht darin, den Inhalt einer beliebigen Webseitendatei (* .htm oder * .html) zu entfernen und die gewünschten Daten in eine neue Datei einzufügen.HTML-Inhalte mit SED löschen
- Alles vorher und einschließlich der
<body>
Markierung soll entfernt werden. - Alles von und einschließlich der
</body>
Tag soll entfernt werden.
Unten ist ein Beispiel, wo <div>
Tags und was zwischen ihnen ist, gehalten werden soll:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>SED Challange</title>
</head>
<body style="background-color:black;"><div style="width:100%; height:150px; margin-top:150px; text-align:center">
<img src="pic.png" width="50" height="50" alt="Pic alt text" />
</div></body></html>
Aber ich habe Probleme <body>
mit dem Entfernen und was kommt vor:
sed 's/.*body.*>//' ./index.html > ./index.html.nobody
Anstelle des gewünschten Ergebnisses werden die beiden separaten Zeilen <body>
und </body>
entfernt!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>SED Challange</title>
</head>
<img src="pic.png" width="50" height="50" alt="Pic alt text" />
Ich kann nicht sehen, warum auch nur einer wäre. Ich freue mich über jede Rückmeldung.
Edit:
Dank SLePort, das ist mein komplettes Skript:
#!/bin/bash
#Search location as user provided argument.
target="$1"
#Recursive, case insensitive search for file extension like htm(l).
hit=$(find $target -type f -iname '*.htm' -or -iname '*.html')
for h in $hit
do
hp=$(realpath $h) #Absolute path of file (hit path).
echo "Stripping performed on $hp" #Informing what file(s) found.
nobody="${hp}_nobody" #File to contain desired data ending with "_nobody".
#Remove file contents from start to and including head-tag,
#Remove body-tag,
#Remove end html-tag,
#Removee blank lines,
#Insert data from file to file_nobody.
sed '1,/<\/head>/d;s/<\/*body[^>]*>//g;s/<\/html>//;/^$/d' $h > $nobody
done
so sollte das Ergebnis '
' sein? – RomanPerekhrestRichtig Roman, für diesen bestimmten Inhalt stimmt das. Während die Aufgabe deklariert wird, befinden sich die gewünschten Daten zwischen den BODY-Tags. Für eine andere Quelldatei sind möglicherweise keine DIV-Tags vorhanden. – henrix