Am un fișier care are un cuvânt cheie RESOURCE. Poate apărea oriunde în fișier, cum ar fi:

[email protected] 

Acum vreau să înlocuiesc [email protected] cu [email protected]. Trebuie să caut linia unde pot găsi cuvântul cheie RESOURCE și apoi să înlocuiesc cuvântul după semnul egal. Cuvântul cheie RESOURCE trebuie să rămână nemodificat.

Poate cineva să mă ajute în acest sens?

input:

[email protected] 

Ieșire:

[email protected] 

Răspuns

grep nu este util în acest caz, deoarece nu vă permite să modificați conținutul fișierului.

În schimb, se poate utiliza sed așa:

fromaddr="[email protected]" toaddr="[email protected]" sed "/^RESOURCE=/s/=""$fromaddr""$/=""$toaddr""/" file >newfile 

Dat file ca

some data [email protected] [email protected] [email protected] [email protected] more data 

aceasta creează newfile ca

some data [email protected] [email protected] [email protected] [email protected] more data 

sed expresia va selecta liniile care încep cu șirul RESOURCE. Pentru fiecare astfel de linie, va înlocui adresa de e-mail, dacă este prezentă pe linie. Modelul utilizat pentru înlocuire asigură că ne potrivim cu = și că adresa se termină la sfârșitul rândului.

Comentarii

  • Nu vreau să codific [email protected], ar trebui să fie ceva de genul nasir37 @ yahoo .com. Vreau să îl înlocuiesc cu oricare altul ca [email protected]. ar trebui să fie dinamic – Lakshminarayana tocmai editează
  • @Lakshminarayana Vezi răspunsul actualizat.
  • Nu vreau să scrie-l din nou într-un fișier nou .. deoarece fișierul constă și din alte date. Este ca mai jos.
  • @Lakshminarayana Apoi rulați cu sed -i dacă credeți ' face lucrurile corecte și nu

nu redirecționează către un fișier nou. ' m, în general, evitând utilizarea sed -i deoarece ' nu este portabilă și, dacă faceți un tip o, poate distruge datele dvs. originale.

  • Înțeleg asta. cum pot căuta linia care are cuvântul RESURSE. Trebuie să-l caut într-un fișier care are alte date și trebuie să-l înlocuiesc. Mai mult, trebuie să trec numele fișierului ca parametru
  • Răspuns

    sed comanda este mai bună.

    sed -i "s/[email protected]/[email protected]/" yourfile 

    Cele de mai sus funcționează în testul meu, dar dacă doriți să-l testați singur, îl puteți încerca mai întâi:

    sed "s/[email protected]/[email protected]/" yourfile 

    Aceasta va scrie modificările la ieșirea standard fără a afecta fișierul.

    Oricum, vă oferă schimbarea dorită de:

    [email protected] 

    Dacă valoarea RESOURCE este diferită în fișier și doriți să o schimbați cu ceva diferit atunci:

    grep RESOURCE= yourfile 

    Aceasta va returna linia unde se află și va afișa valoarea.

    Apoi puteți utiliza

    sed "s/[email protected]/[email protected]/" yourfile 

    Pentru referințe viitoare, este important să clarificați toate acestea în întrebarea dvs. inițială, astfel încât să puteți obține ajutorul de care aveți nevoie fără toate aceste rigamarole.

    Comentarii

    • Nu vreau să codific [email protected], ar trebui să fie ceva de genul [email protected]. Vreau să îl înlocuiesc cu oricare altul ca [email protected]. fii dinamic
    • Nu ' nu înțeleg ce vrei să spui. În întrebarea dvs., arată că doriți ca rezultatul să fie [email protected] pe care îl obțin ambele răspunsuri. Ce vrei să spui prin: " Nu vreau să codific [email protected] "? și " ar trebui să fie dinamic "?
    • @Lakshminarayana Dacă doriți să efectueze modificările la fișier apoi folosiți sed i așa cum am dat în prima mea comandă. Testați-l mai întâi cu sed singur în a doua mea comandă pentru a vă asigura că ' face ceea ce doriți și apoi utilizați sed -i în prima mea comandă odată ce ' sunteți sigur că funcționează.
    • Adică nu vreau să codul greu lor. sed ' s / RESOURCE = Lnreddy37 @ gmail.com / RESOURCE = reddy17777 @ gmail.com / ' yourfile. Vreau să-l transmit ca parametrii de intrare și de ieșire.și, de asemenea, vreau să caut acea linie în care am RESURSĂ și trebuie să o înlocuiesc. la o variabilă sau grep RESOURCE= file, obțineți adresa de e-mail care apare, apoi utilizați sed -i și înlocuiți [email protected] și [email protected] cu orice este acolo și orice vrei să fie.

    Răspunde

    Se pare că spui că vrei să înlocuiești șirul care apare după =, indiferent de ce este de exemplu , în datele eșantionului, doriți să înlocuiți [email protected]. Dar spui că, indiferent care este șirul de după =, vrei să îl înlocuiești cu [email protected] – se pare că vrei care este codificat în mod dur.

    Există câteva variante cu privire la modul de a face acest lucru. Cel mai simplu este

    sed "s/RESOURCE=.*/[email protected]/" 

    care (ca toate comenzile de mai jos) folosește faptul că .* înseamnă „potriviți orice Este acolo”. Dacă nu doriți să tastați RESOURCE= de două ori, puteți scurta cele de mai sus la

    sed "s/\(RESOURCE=\).*/\[email protected]/" 

    unde \(\) marchează o parte a șirului de căutare ca grup (puteți avea până la nouă grupuri) și \1 înseamnă înlocuire cu primul grup.

    Comenzile de mai sus vor găsi și înlocui RESOURCE= oriunde apare pe linie. Deci, de exemplu, intrarea

    # 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] 

    ar fi schimbată în

    # 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] 

    Dacă doriți să se potrivească numai atunci când apare RESOURCE= la începutul unei linii, utilizați ^ :

    sed "s/^RESOURCE=.*/[email protected]/" 

    sau

    sed "s/^\(RESOURCE=\).*/\[email protected]/" 

    Dacă doriți să înlocuiți doar valoarea resursei și nu întregul rest al liniei – de exemplu,

    [email protected] [email protected] 

    la

    [email protected] [email protected] 

    care se poate face și el. Editați-vă întrebarea pentru a spune exact ce doriți, cu explicații complete, clare și exemple.


    OK, alegeți unul dintre cele de mai sus s comenzi. Acum, dacă doriți să editați fișierul în loc (așa cum ați indicat), faceți

    sed -i { s command } { yourfile }

    Dacă doriți să produceți un fișier nou, faceți

    sed { s command } { oldfile } > { newfile }

    Nu tastați de fapt { și } ; sunt acolo doar pentru demarcare.

    Lasă un răspuns

    Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *