Pages : 1
#1 Le 04/12/2007, à 16:30
- Thibaud
[Bash] Supprimer des balises
Bonjour,
Je n'arrive plus à ouvrir un document abiword. En l'ouvrant dans openoffice, j'ai pu voir qu'il utilise un système de balises dans le style de HTML, donc en les supprimant, j'espère retrouver les textes de ce document. En voici un bout :
<p style="Normal" xid="2465" props="text-align:justify; line-height:1.0; margin-bottom:10pt; dom-dir:ltr"><c props="font-family:Arial; font-size:10pt; color:000000; text-decoration:none; text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">- des universités : outils pour la recherche</c></p>
Pour cela, il faut que j'utilise les commandes sed ou awk, n'est-ce pas ? Malheureusement, je ne sais pas du tout faire cela.
J'ai pensé simplement à
cat document | tr -d "<*>"
mais bien sûr ça n'a pas marché.
Merci de l'aide,
Thibaud.
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#2 Le 04/12/2007, à 16:55
- lut!n
Re : [Bash] Supprimer des balises
sed -i 's/^<.*>$//' tonfichier
Fais attention cependant, cela supprimera tout ce qui se trouve entre '< en debut de ligne' et '> en fin de ligne', y compris eventuellement des choses que tu aurais mises toi meme, donc vérifie bien avant (en enlevant le -i, il n'opere pas directement sur le fichier et affiche sur stdout a la place, tu pourra etre sur)
a+
Hors ligne
#3 Le 04/12/2007, à 17:08
- luckytoyn
Re : [Bash] Supprimer des balises
cat nom_fichier.abw | sed 's/<[^>]*>//' | awk ' /<\/p>/ { print $0 }' | sed 's/<\/p>//'
mais c'est vraiment tres tres sale
http://perso.ens-lyon.fr/antoine.rozel/
Hors ligne
#4 Le 04/12/2007, à 17:10
- luckytoyn
Re : [Bash] Supprimer des balises
heu oui... C'est clair que si tu as quoi que ce soit qui soit entre <> dans ton fichier texte, la ligne sera supprimée. Je répète que c'est affreusement sale...
Tu dois pouvoir trouver quelque chose qui converti ton .abw non ?
http://perso.ens-lyon.fr/antoine.rozel/
Hors ligne
#5 Le 04/12/2007, à 17:38
- Thibaud
Re : [Bash] Supprimer des balises
Merci les lu*
Malheureusement, je n'ai pas pu utiliser vos fonctions. Pour celle de lut!n, j'obtiens, avec mon exemple en haut de page :
<p style="Normal" xid="2465" props="text-align:justify; line-height:1.0; margin-bottom:10pt;
dom-dir:ltr"><c props="font-family:Arial; font-size:10pt; color:000000; text-decoration:none;
text-position:normal; font-weight:normal; font-style:normal; lang:fr-FR">- des universités : outils pour
la recherche
Je précise que les balises ne sont pas spécialement en début et en fin de ligne... Cependant, la ligne :
cat essai | sed -e 's/<.*>//'
ne donne pas mieux, car si elle fonctionnait (dans mon exemple ci-dessus), je devrais obtenir :
- des universités : outils pour la recherche
Désolé luckytoyn pour toute cette saleté, mais je n'ai pas pu ouvrir ce fichier du tout avec abiword ni openoffice, je ne vois pas ce qui pourrait ouvrir ce format pas très répandu...
Et je n'ai pas plus de succès avec ton instruction, qui me donne toujours avec mon exemple :
la recherche
Bon, si par hasard je comprenais vos propositions, ça m'aiderait...
La ligne avec sed, c'est une substitution de <.*> par rien c'est ça ? Le .* veut dire n'importe quel caractères entre les deux séries, mais pourquoi le point ?
Dans sed 's/<[^>]*>//' on remplace le . par la classe [^>], mais là je ne comprends pas sa signification. Pourquoi ajouter un sed qui supprime \/p ? Quand au awk, là je ne suis plus !
Dernière modification par Thibaud (Le 04/12/2007, à 18:07)
Bienvenue sur mon site perso : http://thibaud.hulin.free.fr/dokuwiki
Pour l'utilisabilité et l'ergonomie des logiciels libres : http://ergolibre.tuxfamily.org
Apprentissage libre des langues : http://polyglotte.tuxfamily.org et http://www.akademia.ch/websites/ergolang/
Hors ligne
#6 Le 04/12/2007, à 18:57
- Balkoth
Re : [Bash] Supprimer des balises
Bonjour,
sed -e 's/<[^<>]*>//g' fichier
Testé et fonctionnel
Avec un -i pour éditer directement le fichier. D'ailleurs, cat fichier | sed -... fichier se simplifie en sed -... fichier.
La ligne avec sed, c'est une substitution de <.*> par rien c'est ça ? Le .* veut dire n'importe quel caractères entre les deux séries, mais pourquoi le point ?
Dans sed 's/<[^>]*>//' on remplace le . par la classe [^>], mais là je ne comprends pas sa signification.
Le point représente n'importe quel caractère, et * représente la répétition.
Le ^ à l'intérieur d'une accolade est une négation : ici, on cherche n'importe quel caractère différent de < et de >, répété n fois (*).
Le g à la fin permet de remplacer toutes les occurences trouvées.
Hors ligne
#7 Le 04/12/2007, à 19:09
- luckytoyn
Re : [Bash] Supprimer des balises
mais si tu ouvres tout simplement avec emacs ou vi ou gedit ?
awk ' /<\/p>/ { print $0 }'
ca recherche les </p> et affiche la ligne (print $0)
|
"pipe" ca renvoie le résultat d'une commande à la commande d'après
et sed 's/tralala//g'
supprime tous les tralalas... C'est pas wonderfull ça ?
à +
http://perso.ens-lyon.fr/antoine.rozel/
Hors ligne
#8 Le 04/12/2007, à 19:15
- luckytoyn
Re : [Bash] Supprimer des balises
cat truc.abw | awk '/<\/p>/ {print $0}' | sed 's/<[^>]*/</g' | sed 's/<>//g'
peut être...
Mais c'est un peu la même chose...
http://perso.ens-lyon.fr/antoine.rozel/
Hors ligne
#9 Le 04/12/2007, à 19:16
- luckytoyn
Re : [Bash] Supprimer des balises
Au fait tu dis que les balises ne sont pas forcément en fin de ligne ?
Mais qu'est ce qu'il lui est arrivé à ce fichier ? Ben voyons donc ça a point d'bon sens ton affaire
http://perso.ens-lyon.fr/antoine.rozel/
Hors ligne
Pages : 1