Skocz do zawartości

Sed


ralf

Rekomendowane odpowiedzi

witam

mam do napisania skrypt ktory ma usuwac z pliku html znaczniki

chcialem zrobic to poleceniem sed piszac to w taki sposob:

sed -e 's/<[^>]*>//g' "$par" > "$par.txt"

problem jest w tym ze usuwa mi znaczniki ale tylko te ktore zaczynaja sie i koncza w tej samej lini

probowalem tez usunac znaki nowej lini tez uzywajac sed w ten sposob

sed -e 's/[\n \r]//g' "$par" > "$par.txt"

zeby wzial caly plik jako jedna linie i wtedy usunal wszystkie znaczniki

ale wtedy czasem nie kasuje nic a czasem wszystkow manualu nie moge znalez nic co by naprowadzilo mnie na blad dlatego prosze o pomoc

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jak mamy przykladowy plik:

<html>

<head><title>tutaj jakies cos</title>

<a href =

"jakis.link.pl"

target="_blank" >

<p>tutaj jakis tekst<b>tu pogrubiony</b></p>

</html>

to nie usunie mi tego:

<a href =

"jakis.link.pl"

target="_blank" >

bo z tego co wiem sed bieze do bufora po jednej lini i jesli nie napotka > to nie usunie znacznika

tak samo nie usunie mi komentarzy ktorych tez chcialbym sie pozbyc albo skryptow javy

Odnośnik do komentarza
Udostępnij na innych stronach

no ja wlasnie tak probowalem. na poczatku pisalem

sed -e 's/[\n\r]//g'

zeby mi usunal wszytkie znaki nowej lini albo returny ale nie che to dzialac bo moze jakos zle to pisze

a zeby jednak bylo przejzyste to mozna najpierw te entery zamienic na jakis znak typu _ i pozniej juz po usunieciu znacznikow zamienic znowy _ na entery

Odnośnik do komentarza
Udostępnij na innych stronach

no ale wlasnie jak mamy wyrazenie regulatrne postaci [\n\r] to jako wzorzec powinien wziasc albo \n albo \r albo \n\r prawda??

teraz probuje na rozne sposoby zamienic te znaki nowej lini na cokolwiek ale bez rezultatow

 

ale chyba wiem w czym jest problem

sed chyba nie najlepiej kojazy ze \n i \r to znaki nowej lini chociaz moze mi sie wydawac

 

generalnie caly skrypt wyglada tak:

#!/bin/bash
echo "podaj nazwe pliku"
read par
touch "$par".txt
sed -e 's/\n>/__/g' "$par" > "$pat.txt" #1
sed -e 's/<[^>]*>//g' "$par.txt" > "$par.txt" #2

 

i z samym poleceniem #2 usuwa tylko te zanczniki ktore zaczynaja sie i koncza w jednej lini

#1 ma niby zamieniac znak nowej lini na __ ale kurcze nie zamienia

Odnośnik do komentarza
Udostępnij na innych stronach

Sed nie usuwa Ci znaków końca linii, ponieważ jest zorientowany liniowo tzn. przetwarza plik linia po linii i tekst który wypluwa także kończy znakiem 'n'. Jeśli chcesz usunąć z pliku tekstowego znaki końca wiersza, to bardzo łatwo możesz to zrobić przy pomocy perla. Poniżej masz przykład jak zapodać sedowi plik w jednej linii:

 

cat plik | perl -e 'while (<>) { chop; print($_); }' | sed -e 'usuniecie_znacznikow_html_:)'

 

Odnośnik do komentarza
Udostępnij na innych stronach

juz sobie poradzilem z problemem chociaz nie do konca

caly plik zapisalem do jenej lini poleceniem tr a znaki konca lini zaminilem sobie na znak o kodzie 1 pozniej usunolem wszystkie tagi ale zostaly jeszcze te zagniezdzone w komentarzach ale z tym sobei tez poradzilem pozniej ten znak 1 zamienilem na znaki nowej lini i wszytko jest ok

dziekuje za pomoc i pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...