[HS] remplacer une portion de texte dans un fichier
Le
andre_debian

Je souhaite remplacer une portion de texte,
dans un fichier .jsp entre les expressions :
<center> texte à supprimer</td>
par :
<center></td>
J'ai vainement tout essayé avec "preg_replace" (php) dont :
$new_string = preg_replace(<center>(.*)",</td>",$string);
et
avec "sed" :
sed '/^center.*td$/d' fichier.jsp
Merci d'une aide.
André
dans un fichier .jsp entre les expressions :
<center> texte à supprimer</td>
par :
<center></td>
J'ai vainement tout essayé avec "preg_replace" (php) dont :
$new_string = preg_replace(<center>(.*)",</td>",$string);
et
avec "sed" :
sed '/^center.*td$/d' fichier.jsp
Merci d'une aide.
André
écrit :
'soir,
l'option "d" de sed est pour supprimer une ligne. Ce serait pas plutô t
qc comme
sed '/^center.*td$//g' fichier.jsp?
A ajuster, c'est juste une piste.
bye
Klaus
J'ai tenté tout ça, mais en vain...
Réponse permanente :
sed: impossible de trouver l'étiquette pour sauter à `d>/</td>/g'
a écrit :
Lire la page de man de sed, elle est courte.
Une instruction sed a trois formes possibles :
— sans adresse, l’instruction s’applique à toutes les lignes :
commande args options
— avec une adresse, l’instruction ne s’applique qu’aux lignes
qui correspondent à l’adresse :
adresse commande args options
— avec deux adresses, l’instruction ne s’appliq ue qu’aux lignes
entre les deux lignes qui correspondent à l’adresse :
début,fin commande args options
Une adresse est un numéro de ligne ou une expression
rationnelle.
Le principal problème avec l’instruction proposée p ar Klaus
est qu’il n’y a pas de commande.
La commande souhaitée est la substitution, 's'. Elle prend 0,
1 ou 2 adresses.
Donc : sed -e 's: (':' sert ici de séparateur pour les arguments de 's', '/'
faisant partie de l’expression, ça évite d’av oir à le protéger.)
Problèmes. Ça ne fera pas ce que tu veux si :
1. il y a des sauts de ligne entre <center> et </td> ;
2. il y a plusieurs </td> sur la même ligne (.* prend jusqu’ au
dernier).
Se procurer un bonne référence sur les expressions
rationnelles pour résoudre ces problèmes.
--
Sylvain Sauvage
C'est un peu le même problème avec preg_replace :
http://php.net/manual/fr/function.preg-replace.php
Et
$s=preg_replace("! ça ne passe pas ?
++C.
Content-Type: text/plain; charset=UTF-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
Fri, 2 Oct 2015 21:57:27 +0200
écrivait :
un truc comme ça :
$ cat wrk
par :
<center></td>
$ sed 'sx <center></td>
par :
<center></td>
J'espère que c'est ce que tu recherches.
Jean-Marc
--Signature=_Fri__2_Oct_2015_23_03_44_+0200_F7O yP_1gUeI./
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBCAAGBQJWDvE1AAoJEECwQOvthjrRw60P/jZNVwHHoyVou7Cf2qaPjVlL
mgKgbef9LzvrhqlNRmfuWmLLCxplcDd28jl06bAfzS4VNCsqfataIa4JlZtIp/qo
ucd6uPm6uvSYeoTfM/zhqtPz6krMu+dvPmfIWUtlbL5KdKncd4C5W/IQC9dtL4+B
1w26gqxKVhKRQ/r68DFBtJm/DWg20Mp/66detL59yh5R/Q2pz0PotSUFliKMQeK5
Oy2glLjIt9GY1BHshqbCQzwFZIEwwCUKPqoVHY5yV3I85cTUD3IC8iz2iDATcjH3
FArXNlfENjc5+TjkEmAAHzCHZPG1TxmuIJQQmvVt8mAIRO5nHqtX0faKPAuKL2jF
qWjlgrbv25Lovt4YEz2kG8xcStcTsZncWze0EtMyKDkKLOFPHRRK//GAuPkehAl1
en/Q3prxuxT7ZLflUGNCQu2LoTU6kmEAU3csECz8L5E9ojJ+Qb+yB/ilfxjEbiG0
BSprufM4WAQCR0hdw5LxCK9Nv4jMH8k1RfZhAhO+6fBsItzWZ0r7T3F7fG0XDPAv
AfZwAzlH2jBoIa7x+ZxXa3zfpSli2z4Vb+Ip1vVA2bDtSDPtJ1u1+/HAPEqha3uJ
YtnQpRhH8Ls3w9HuL+J6wPjK2cz56bQGmfaYA7kAwVaLnhGrinpG7plieOD7rMDJ
cweu0O9O6Biyv5RdLeci
=9/Bx
-----END PGP SIGNATURE-----
--Signature=_Fri__2_Oct_2015_23_03_44_+0200_F7O yP_1gUeI./--
Dans ce genre de cas, s'il ne doit pas y avoir de balise </td>, j'ouvrirais le fichier dans Emacs, puis :
query-remplace-regexp (M-C-%)
regexp à replacer : <center>[^<]+</td>
chaîne de remplacement : <center></td>
Cela va marcher même avec des sauts de ligne.
Sinon...je ne sais pas. La réponse m'intéresse aussi.
François
"sed -e 's: modifie très bien, merci.
Je me heurte encore aux apostrophes " ' " :
sed -e "s/document.write('//g" fichier.jsp
ou
sed -e "s/document.write('//g" fichier.jsp
ou
sed -e "s:document.write('::" fichier.jsp
ne me retirent pas : "document.write('
André
Bonjour,
....
je n'ai plus le mel d'origine, mais comme ça, ça devrait être
compréhensible :
$ cat text.txt
<center>texte à supprimer</td>
$ sed 's# <center></td>
Il ne faut pas utiliser "/" comme séparateur parce qu'il fait partie
du texte à traiter (</td>)
bonne soirée
Klaus
Oui et merci, ceci marche bien, comme déjà répondu.
Maintenant ce sont les apostrophes " ' " qui coincent.
Retirer : document.write('
J'ai essayé ça :
sed "s#document.write('##g" fichier.jsp
mais marche pas...
André