#1 Le 19/12/2009, à 21:47
- YvanD
[Résolu] Sed : remplacer les retours à la ligne ... par un espace
Salut tout le monde,
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
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