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 19/12/2009, à 21:47

YvanD

[Résolu] Sed : remplacer les retours à la ligne ... par un espace

Salut tout le monde, big_smile

Je bloque sur un truc qui parait simple.
Je cherche à remplacer tous les retours à la ligne des lignes qui NE finissent PAS par « > », d'un fichier « File.html » avec la commande sed par un espace, mais je n'y arrive pas.

Pour être plus clair, voici un exemple, je veux transformer ceci :

<p>Hello comment ça va ?
Blabla Blabla Blabla Blabla Blabla</p>
<h1>Encore un titre</h1>

ainsi :

<p>Hello comment ça va ? Blabla Blabla Blabla Blabla Blabla</p>
<h1>Encore un titre</h1>

Merci de votre aide.

EDIT :
La commande :

sed 's/\n//g' File.html

ne supprime pas les retours à la ligne, pourquoi ?

Dernière modification par YvanD (Le 19/12/2009, à 22:13)

Hors ligne

#2 Le 19/12/2009, à 21:55

Jos31

Re : [Résolu] Sed : remplacer les retours à la ligne ... par un espace

Apparemment le fonctionnement interne de sed ne permet pas de réaliser ce genre d'opération, car sed lit le flux ligne par ligne, enleve le retour a la ligne, effectue l'opération demandée, puis réecrit la ligne avec un retour charriot.

C'est expliqué dans le man de sed

Donc pour faire ce que tu veux, tu peux utiliser tr a la place, voir combiner tr et sed (tr transforme par exemple les retour a la ligne en |, et sed transforme les | en ce que tu veux)

cat File.html | tr '\n' ' '

ou

cat File.html | tr '\n' '|' | sed 's/[a-z]|/ /g' | tr '|' '\n'

-> On transforme les '\n' en '|', sed transforme les '|' que tu souhaite en ' ', puis les '|' restants sont retransformés en retour charriot

Dernière modification par Jos31 (Le 19/12/2009, à 21:58)

Hors ligne

#3 Le 19/12/2009, à 22:02

YvanD

Re : [Résolu] Sed : remplacer les retours à la ligne ... par un espace

Merci de ta réponse.

Je pensais, en transformant avec tr ne pas pourvoir ensuite remplacer | (ou % dans mon ex après) par un retour à a ligne mais en fait cette commande marche :

cat File.html | tr '\n' '%' |sed 's/>%/>\n/g'

Je met en Résolu.

EDIT : une dernière question :

Comment enregistrer dans le fichier le résultat de l'opération, car avec "opération > File.html" ça marche pas. (sans passer par 2 fichiers si possible)

Dernière modification par YvanD (Le 19/12/2009, à 22:03)

Hors ligne

#4 Le 19/12/2009, à 22:07

Jos31

Re : [Résolu] Sed : remplacer les retours à la ligne ... par un espace

YvanD a écrit :

EDIT : une dernière question :

Comment enregistrer dans le fichier le résultat de l'opération, car avec "opération > File.html" ça marche pas. (sans passer par 2 fichiers si possible)

Impossible de réecrire directement dans le meme fichier, tu va etre obligé de passer par un fichier temporaire.

cat File.html | tr '\n' '%' |sed 's/>%/>\n/g' > /tmp/res.html
cp /tmp/res.html File.html

Dernière modification par Jos31 (Le 19/12/2009, à 22:08)

Hors ligne