Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS] remplacer une portion de texte dans un fichier

15 réponses
Avatar
andre_debian
Je souhaite remplacer une portion de texte,
dans un fichier .jsp entre les expressions :
<center> ...texte =E0 supprimer...</td>
par :
<center></td>

J'ai vainement tout essay=E9 avec "preg_replace" (php) dont :
$new_string =3D preg_replace(<center>(.*)",</td>",$string);
et=20
avec "sed" :
sed '/^center.*td$/d' fichier.jsp

Merci d'une aide.

Andr=E9

10 réponses

1 2
Avatar
Klaus Becker
Le Freitag 02 Oktober 2015, 21:57:27 a
écrit :
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é




'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
Avatar
andre_debian
On Friday 02 October 2015 22:09:56 Klaus Becker wrote:
Le Freitag 02 Oktober 2015, 21:57:27 a
écrit :
> 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);
> avec "sed" :
> sed '/^center.*td$/d' fichier.jsp

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.



J'ai tenté tout ça, mais en vain...
Réponse permanente :
sed: impossible de trouver l'étiquette pour sauter à `d>/</td>/g'
Avatar
Sylvain L. Sauvage
Le vendredi 2 octobre 2015, 22:23:03
a écrit :
[…]
> sed '/^center.*td$//g' fichier.jsp?
>
> A ajuster, c'est juste une piste.

J'ai tenté tout ça, mais en vain...
Réponse permanente :
sed: impossible de trouver l'étiquette pour sauter à
`d>/</td>/g'



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:<center>.*</td>:<center></td>:'
(':' 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
Avatar
Philippe Gras
Le 2 oct. 2015 à 23:14, "Sylvain L. Sauvage" a écrit :

Le vendredi 2 octobre 2015, 22:23:03
a écrit :
[…]
sed '/^center.*td$//g' fichier.jsp?

A ajuster, c'est juste une piste.



J'ai tenté tout ça, mais en vain...
Réponse permanente :
sed: impossible de trouver l'étiquette pour sauter à
`d>/</td>/g'



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’applique 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 par Klaus
est qu’il n’y a pas de commande.



C'est un peu le même problème avec preg_replace :
http://php.net/manual/fr/function.preg-replace.php


La commande souhaitée est la substitution, 's'. Elle prend 0,
1 ou 2 adresses.

Donc : sed -e 's:<center>.*</td>:<center></td>:'
(':' sert ici de séparateur pour les arguments de 's', '/'
faisant partie de l’expression, ça évite d’avoir à 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

Avatar
Cyrille
Bsr,

Et
$s=preg_replace("!<center>(.*)</td>!Ui","<center></td>",$s);
ça ne passe pas ?

++C.
Avatar
Jean-Marc
--Signature=_Fri__2_Oct_2015_23_03_44_+0200_F7O yP_1gUeI./
Content-Type: text/plain; charset=UTF-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Fri, 2 Oct 2015 21:57:27 +0200
écrivait :

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




un truc comme ça :
$ cat wrk
<center> ...texte à supprimer...</td>
par :
<center></td>

$ sed 'sx<center>.*</td>x<center></td>xg' wrk
<center></td>
par :
<center></td>


Merci d'une aide.



J'espère que c'est ce que tu recherches.


André





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./--
Avatar
François Meyer
Bonjour,

Dans ce genre de cas, s'il ne doit pas y avoir de balise <...> avant la
</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
Avatar
andre_debian
On Friday 02 October 2015 23:14:07 Sylvain L. Sauvage wrote:
Le vendredi 2 octobre 2015, 22:23:03
a écrit :
Donc : sed -e 's:<center>.*</td>:<center></td>:'
(':' sert ici de séparateur pour les arguments de 's', '/'
faisant partie de l’expression, ça évite d’avoi r à le protéger.)




"sed -e 's:<center>.*</td>:<center></td>:' fichier.jsp"
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é
Avatar
Klaus Becker
Le Samstag 03 Oktober 2015, 14:54:08 François Meyer a écrit :

Bonjour,
....

je n'ai plus le mel d'origine, mais comme ça, ça devrait être
compréhensible :

Je souhaite remplacer une portion de texte,
dans un fichier .jsp entre les expressions :
<center> ...texte à supprimer...</td>
par :
<center></td>



$ cat text.txt
<center>texte à supprimer</td>

$ sed 's#<center>.*</td>#<center></td>#g' text.txt
<center></td>

Il ne faut pas utiliser "/" comme séparateur parce qu'il fait partie
du texte à traiter (</td>)

bonne soirée

Klaus
Avatar
andre_debian
On Saturday 03 October 2015 19:40:43 Klaus Becker wrote:
Le Samstag 03 Oktober 2015, 14:54:08 François Meyer a écrit :
je n'ai plus le mel d'origine, mais comme ça, ça devrait être
compréhensible :
> Je souhaite remplacer une portion de texte,
> dans un fichier .jsp entre les expressions :
> <center> ...texte à supprimer...</td>
> par : <center></td>

$ cat text.txt
<center>texte à supprimer</td>

$ sed 's#<center>.*</td>#<center></td>#g' text.txt
<center></td>

Il ne faut pas utiliser "/" comme séparateur parce qu'il fait partie
du texte à traiter (</td>)


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é
1 2