Jai un fichier qui a un mot-clé RESOURCE
. Cela peut se produire nimporte où dans le fichier, comme:
[email protected]
Maintenant, je veux remplacer [email protected]
par [email protected]
. Je dois rechercher la ligne où je peux trouver le mot-clé RESOURCE
, puis remplacer le mot après le signe égal. Le mot clé RESOURCE
doit rester inchangé.
Quelquun pourrait-il maider à ce sujet?
input:
[email protected]
Résultat:
[email protected]
Réponse
grep
nest pas utile dans ce cas car il ne vous permet pas de modifier le contenu du fichier.
À la place, on peut utiliser sed
comme ceci:
fromaddr="[email protected]" toaddr="[email protected]" sed "/^RESOURCE=/s/=""$fromaddr""$/=""$toaddr""/" file >newfile
Donné file
comme
some data [email protected] [email protected] [email protected] [email protected] more data
cela crée newfile
comme
some data [email protected] [email protected] [email protected] [email protected] more data
Le sed
expression sélectionnera les lignes commençant par la chaîne RESOURCE
. Pour chacune de ces lignes, il remplacera ladresse e-mail, si elle est présente sur la ligne. Le modèle utilisé pour la substitution garantit que nous correspondons à =
et que ladresse se termine à la fin de la ligne.
Commentaires
Answer
Le est meilleure.
sed -i "s/[email protected]/[email protected]/" yourfile
Ce qui précède fonctionne dans mon test, mais si vous voulez le tester par vous-même, vous pouvez dabord essayer celui-ci:
sed "s/[email protected]/[email protected]/" yourfile
Cela écrira les modifications dans la sortie standard sans affecter le fichier.
De toute façon, cela donne la modification souhaitée de:
[email protected]
Si la valeur de RESOURCE
est différente dans le fichier et que vous voulez changer quelque chose de différent, alors:
grep RESOURCE= yourfile
Cela retournera la ligne où elle se trouve et affichera la valeur.
Vous pouvez ensuite utiliser
sed "s/[email protected]/[email protected]/" yourfile
Pour référence future, il est important de clarifier tout cela dans votre question initiale afin que vous puissiez obtenir laide dont vous avez besoin sans tout ce rigamarole.
Commentaires
- Je ne veux pas coder en dur le [email protected], il devrait être quelque chose comme [email protected]. Je veux remplacer par un autre comme [email protected]. il devrait soyez dynamique
- Je ne ‘ pas comprendre ce que vous voulez dire. Dans votre question, cela montre que vous voulez que la sortie soit
[email protected]
que les deux réponses obtiennent. Que voulez-vous dire par: » Je ne veux pas coder en dur le [email protected] « ? et » il doit être dynamique « ? - @Lakshminarayana Si vous voulez quil apporte réellement les modifications au file puis utilisez
sed i
comme je lai donné dans ma première commande. Testez-le dabord avec lesed
seul dans ma deuxième commande pour vous assurer quil ‘ fait ce que vous voulez, puis utilisez le ‘ div id = « 6725e0b27e »>
dans ma première commande une fois que vous ‘ êtes sûr que cela fonctionne.
grep RESOURCE= file
, récupérez ladresse e-mail qui saffiche, puis utilisez sed -i
et remplacez [email protected]
et [email protected]
avec tout ce qui est là et ce que vous voulez que ce soit. Réponse
Vous semblez dire que vous souhaitez remplacer la chaîne qui apparaît après =
, peu importe ce que cest – par exemple , dans les exemples de données, vous souhaitez remplacer [email protected]
. Mais vous dites que, quelle que soit la chaîne après =
, vous voulez la remplacer par [email protected]
– apparemment vous voulez qui est codé en dur.
Il existe quelques variantes sur la façon de procéder. Le plus simple est
sed "s/RESOURCE=.*/[email protected]/"
qui (comme toutes les commandes ci-dessous) utilise le fait que .*
signifie « correspondre à tout y a-t-il ». Si vous ne voulez pas taper RESOURCE=
deux fois, vous pouvez raccourcir ce qui précède en
sed "s/\(RESOURCE=\).*/\[email protected]/"
où \(
… \)
marque une partie de la chaîne de recherche en tant que groupe (vous pouvez avoir jusquà neuf groupes) et \1
signifie remplacer par le premier groupe.
Les commandes ci-dessus trouveront et remplaceront RESOURCE=
partout où il apparaît sur la ligne. Ainsi, par exemple, lentrée
# Lakshminarayana wants to change all occurrences of "RESOURCE=". [email protected] [email protected] [email protected] FOX RESOURCE=The quick brown fox # Comment: Originally line 2 said [email protected]
serait remplacée par
# Lakshminarayana wants to change all occurrences of "[email protected] [email protected] [email protected] [email protected] FOX [email protected] # Comment: Originally line 2 said [email protected]
Si que vous voulez faire correspondre uniquement lorsque RESOURCE=
apparaît au début dune ligne, utilisez ^
:
sed "s/^RESOURCE=.*/[email protected]/"
ou
sed "s/^\(RESOURCE=\).*/\[email protected]/"
Si vous souhaitez remplacer uniquement la valeur de la ressource, et non tout le reste de la ligne – par exemple,
[email protected] [email protected]
à
[email protected] [email protected]
cela peut être fait aussi. Modifiez votre question pour dire exactement ce que vous voulez, avec des explications complètes et claires et exemples.
OK, choisissez lune des s
commandes. Maintenant, si vous souhaitez éditer votre fichier sur place (comme vous lavez indiqué), faites
sed -i { s command } { yourfile }
Si vous voulez produire un nouveau fichier, faites
sed { s command } { oldfile } > { newfile }
Ne saisissez pas réellement {
et }
; ils ne sont là que pour la démarcation.
sed -i
si vous pensez il ‘ fait la bonne chose et ne ‘ t rediriger vers un nouveau fichier. Je ‘ m évitant généralement dutilisersed -i
car il ‘ est non portable et puisque si vous faites un typ o, cela peut détruire vos données dorigine.