Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink (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 smile


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* smile
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 wink

Avec un -i pour éditer directement le fichier. D'ailleurs, cat fichier | sed -... fichier se simplifie en sed -... fichier.

Thibaud a écrit :

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 ? smile

à +


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 smile


http://perso.ens-lyon.fr/antoine.rozel/

Hors ligne