SED
Résolu
Balckangel
-
Balckangel -
Balckangel -
Bonjour,
j'aurais besoin de votre aide sur la commande sed.
j'ai un fichier "test" qui comporte cette ligne :
<Context antiJARLocking="true" reloadable="true" cookies="true">
j'aimerais savoir comment remplacer cookies="true" par cookies="false" (en sachant que parfois cookies est déjà à false)
j'ai essayer cette commande :
sed 's/cookies=\"true\"\|cookies=\"false\"/cookies=\"false\"/' test
Mais en vain ....
Merci d'avance !
j'aurais besoin de votre aide sur la commande sed.
j'ai un fichier "test" qui comporte cette ligne :
<Context antiJARLocking="true" reloadable="true" cookies="true">
j'aimerais savoir comment remplacer cookies="true" par cookies="false" (en sachant que parfois cookies est déjà à false)
j'ai essayer cette commande :
sed 's/cookies=\"true\"\|cookies=\"false\"/cookies=\"false\"/' test
Mais en vain ....
Merci d'avance !
A voir également:
- SED
- Remplacez le mot sed par le mot mais dans tout le texte. combien de caractères contient le document suite à cette modification (en incluant les espaces) ? - Guide
- Sed et ses caprices (ou les miens) ✓ - Forum Linux / Unix
- Sed crlf - Astuces et Solutions
- Sed - Remplacement texte par retour à la ligne ? ✓ - Forum Linux / Unix
- Sed supprimer ligne vide - Forum Linux / Unix
3 réponses
Salut,
;-))
$ cat plop <Context antiJARLocking="true" reloadable="true" cookies="true"> <Context antiJARLocking="true" reloadable="true" cookies="false"> <Context antiJARLocking="true" reloadable="true" cookies="true"> <Context antiJARLocking="true" reloadable="true" cookies="false"> $ sed 's/\(cookies="\)true/\1false/' plop <Context antiJARLocking="true" reloadable="true" cookies="false"> <Context antiJARLocking="true" reloadable="true" cookies="false"> <Context antiJARLocking="true" reloadable="true" cookies="false"> <Context antiJARLocking="true" reloadable="true" cookies="false"> $
;-))
j'ai pas tout compris mais merci ^^
j'ai trouver aussi cela :
sed '/cookies=\"false\"/ s/cookies=\"false\"/cookies=\"true\"/' test
laquelle est la mieux ?
j'ai trouver aussi cela :
sed '/cookies=\"false\"/ s/cookies=\"false\"/cookies=\"true\"/' test
laquelle est la mieux ?
Les deux font la même chose. Par contre la tienne est très lourde syntaxiquement parlant ;-\
Tu cibles une ligne avec un motif '/cookies=\"false\"/' ce qui n'est utile que si ce motif permet de bien différencier une ligne et d'y effectuer un traitement, mais apparemment ce n'est pas le cas vu que dans la partie de substitution tu substitues l'intégralité de ton motif. Dans ce cas la répétition est inutile et la syntaxe est la suivante (par ailleurs la protection des guillemets est inutile vu que c'est des quotes simples qui entourent l'expression) :
Moi pour ma part, j'utilise les sous-expressions et références arrières (voir dans la FAQ les chapitres dédiés).
Dans ma syntaxe 's/\(cookies="\)true/\1false/', j'encadre le motif 'cookies="' avec des parenthèses protégées, ce qu'on nomme une sous-expression, et ce qui me permet dans la partie de remplacement de faire appel à cette sous-expression grâce à la référence arrière "\1".
En gros, je cible le motif 'cookies="true', et dans ce motif je ne garderai que la partie 'cookies="', que je remplacerai ensuite par elle même (\1) suivi du mot "false". Le "true" passant de ce fait à la trappe.
Tu cibles une ligne avec un motif '/cookies=\"false\"/' ce qui n'est utile que si ce motif permet de bien différencier une ligne et d'y effectuer un traitement, mais apparemment ce n'est pas le cas vu que dans la partie de substitution tu substitues l'intégralité de ton motif. Dans ce cas la répétition est inutile et la syntaxe est la suivante (par ailleurs la protection des guillemets est inutile vu que c'est des quotes simples qui entourent l'expression) :
sed '/cookies="false"/ s//cookies="true"/' testCe qui revient tout simplement à faire :
sed 's/cookies="false"/cookies="true"/' test
Moi pour ma part, j'utilise les sous-expressions et références arrières (voir dans la FAQ les chapitres dédiés).
Dans ma syntaxe 's/\(cookies="\)true/\1false/', j'encadre le motif 'cookies="' avec des parenthèses protégées, ce qu'on nomme une sous-expression, et ce qui me permet dans la partie de remplacement de faire appel à cette sous-expression grâce à la référence arrière "\1".
En gros, je cible le motif 'cookies="true', et dans ce motif je ne garderai que la partie 'cookies="', que je remplacerai ensuite par elle même (\1) suivi du mot "false". Le "true" passant de ce fait à la trappe.
Bonjour !
J'ai encore un autre problème mais celui-ci est plus complexe
j'essaye de créer une tahce Ant qui execute une commande windows :
<target name="tools.test.change" depends="tools.set.root.pwd">
<exec executable="sed">
<arg line="s/\(DIRECTORY\).*/\1\="${server.tools.change}"/ D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java > D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java"/>
</exec>
</target>
cependant, l'éxécution de cette commande se termine par :
tools.test.change:
[exec] sed: -e expression n°1, caractère 22: option inconnue pour 's'
[exec] Result: 1
la commande est :
sed s/\(DIRECTORY\).*/\1\="${server.tools.change}"/ D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java > D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java
Any ideas ?
J'ai encore un autre problème mais celui-ci est plus complexe
j'essaye de créer une tahce Ant qui execute une commande windows :
<target name="tools.test.change" depends="tools.set.root.pwd">
<exec executable="sed">
<arg line="s/\(DIRECTORY\).*/\1\="${server.tools.change}"/ D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java > D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java"/>
</exec>
</target>
cependant, l'éxécution de cette commande se termine par :
tools.test.change:
[exec] sed: -e expression n°1, caractère 22: option inconnue pour 's'
[exec] Result: 1
la commande est :
sed s/\(DIRECTORY\).*/\1\="${server.tools.change}"/ D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java > D:/JenkinsHome/workspace/Hookah - test Screen/src/tests/selenium/testConst.java
Any ideas ?
Salut,
Change le délimiteur par défaut (qui est le slash) par tout autre caractère qui n'est pas susceptible de se retrouver dans ta syntaxe.
Voir dans la FAQ : Délimiteur de commande
Change le délimiteur par défaut (qui est le slash) par tout autre caractère qui n'est pas susceptible de se retrouver dans ta syntaxe.
Voir dans la FAQ : Délimiteur de commande
Au lieu d'utiliser le slash comme délimiteur, utiliser un autre caractère, comme le dièse (#).
la modification du délimiteur est temporaire (juste pour la commande) ou permanent ?
Temporaire, juste pour la syntaxe. Tu peux même dans une même ligne contenant plusieurs commandes de substitution, employer plusieurs délimiteurs.
sed 's#motif#remplacement#' fichier
la modification du délimiteur est temporaire (juste pour la commande) ou permanent ?
Temporaire, juste pour la syntaxe. Tu peux même dans une même ligne contenant plusieurs commandes de substitution, employer plusieurs délimiteurs.
ok c'est déjà une bonne chose,
Il n'y a pas besoin de "déclaré" que c'est un délimiteur ?
comme cela ?
sed s#\(DIRECTORY\).*#\1\="${server.tools.change}"# D:#JenkinsHome#workspace#Hookah - test Screen#src#tests#selenium#testConst.java > D:#JenkinsHome#workspace#Hookah - test Screen#src#tests#selenium#testConst.java
Il n'y a pas besoin de "déclaré" que c'est un délimiteur ?
comme cela ?
sed s#\(DIRECTORY\).*#\1\="${server.tools.change}"# D:#JenkinsHome#workspace#Hookah - test Screen#src#tests#selenium#testConst.java > D:#JenkinsHome#workspace#Hookah - test Screen#src#tests#selenium#testConst.java