Script med hjälp av sed söker igenom alla html-sidor

Trädvy Permalänk
Medlem
Registrerad
Apr 2016

Script med hjälp av sed söker igenom alla html-sidor

Hejsan, jag håller på med en uppgift där jag ska skriva ett script som med hjälp av "sed" söker igenom alla html-sidor(html,htm) rekursivt från den plats du specificerar(argumentet till scriptet). och för varje fil ska allt före taggen <body> och allt efter taggen </body> plockas bort och sparas i en ny fil som heter _nobody.

Jag har skapat en fil som heter index.html med följande information i.

<!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>Linux</title>
</head>
<body style="background-color:black;">
<div style="width:100%; height:123px; margin-top:150px; text-align:center">
<img src="images/rule.png" width="428" height="123" alt="Check" />
</div>
</body>
</html>

Det är alltså bara det här som ska synas och sparas i den nya filen(_nobody) när jag kör scriptet.

<div style="width:100%; height:123px; margin-top:150px; text-align:center">
<img src="images/soon.png" width="428" height="123" alt="Check back soon" />
</div>

Jag har skrivit följande script med får det inte att fungera.. så tänkte höra om ni har några tips på hur jag skulle kunna göra istället för jag har kört fast.

#!/bin/bash

for file in $( ls $1 -r );
do
if [ -d $file ];
then
find -type f -name "*.html" -o -name "*.htm" -exec sh -c `sed '0,/<body/ {/<body/! d ; /<body/ s/.*<body[^>]*>// } ; \|</body|,$ { \|</body|! d ; \|</body | s|</body.* || } ;' "{}"> "{}_nobody" \;

echo "Done!"

exit 0

else

echo "Unvalid path, please try again."

exit 1

fi

done

Trädvy Permalänk
Medlem
Registrerad
Jan 2014
Skrivet av janneblade:

och för varje fil ska allt före taggen <body> och allt efter taggen </body> plockas bort och sparas i en ny fil som heter _nobody.
[...]
Det är alltså bara det här som ska synas och sparas i den nya filen(_nobody) när jag kör scriptet.

<div style="width:100%; height:123px; margin-top:150px; text-align:center">
<img src="images/soon.png" width="428" height="123" alt="Check back soon" />
</div>

Så du är bara intresserad av innehållet i <html>-elementet? <html>-taggen och <!DOCTYPE>-taggen ska också bort?

Skrivet av janneblade:

Jag har skrivit följande script med får det inte att fungera..

En beskrivning av vad som inte fungerar, tillsammans med minimal kod som krävs för att reproducera felet hade varit hjälpsamt.

Skrivet av janneblade:

så tänkte höra om ni har några tips på hur jag skulle kunna göra istället för jag har kört fast.

Om informationen du vill behålla är innehållet i <html>-taggen minus innehållet i en ev. <body>-tagg rekommenderar jag att du använder något annat än reguljära uttryck.

Python har en inbyggd parser som är ganska enkel att använda och en lite robustare parser som klarar ful, regelvidrig html. Liknande funktioner finns till många andra språk.