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

  • Je ne veux pas coder en dur le [email protected], ça devrait être quelque chose comme nasir37 @ yahoo .com. Je veux remplacer par nimporte quel autre comme [email protected]. Cela devrait être dynamique – Lakshminarayana vient de modifier
  • @Lakshminarayana Voir la réponse mise à jour.
  • Je ne veux pas écrivez-le à nouveau dans un nouveau fichier .. car le fichier contient également dautres données. Comme ci-dessous.
  • @Lakshminarayana Ensuite, exécutez avec sed -i si vous pensez il ‘ fait la bonne chose et ne ‘ t rediriger vers un nouveau fichier. Je ‘ m évitant généralement dutiliser sed -i car il ‘ est non portable et puisque si vous faites un typ o, cela peut détruire vos données dorigine.
  • Je comprends cela. comment puis-je rechercher la ligne qui contient le mot RESSOURCE. Je dois le rechercher dans un fichier contenant dautres données et le remplacer. De plus, je dois passer le nom du fichier en paramètre

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 le sed 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.

  • Je veux dire que je ne veux pas coder en dur leur. sed ‘ s / RESOURCE = Lnreddy37 @ gmail.com / RESOURCE = reddy17777 @ gmail.com / ‘ votre fichier. je veux le passer comme des paramètres dentrée et de sortie.et aussi je veux rechercher cette ligne où jai la RESSOURCE et je dois la remplacer
  • @Lakshminarayana Ensuite, soit utilisez la réponse de Kusalananda ‘ et passez les adresses e-mail à une variable ou 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]/" 

    \(\) 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.

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *