Minulla on tiedosto, jolla on RESOURCE avainsana. Sitä voi esiintyä missä tahansa tiedostossa, kuten:

[email protected] 

Haluan nyt korvata [email protected] nimellä [email protected]. Minun täytyy etsiä riviä, josta löydän avainsanan RESOURCE, ja korvata sitten sana yhtäläisyysmerkin jälkeen. Avainsanan RESOURCE on pysyttävä muokkaamattomana.

Voisiko joku auttaa minua tässä?

syöte:

[email protected] 

Tulos:

[email protected] 

vastaus

grep ei ole hyödyllinen tässä tapauksessa, koska se ei salli sinun muokata tiedoston sisältöä.

Sen sijaan voidaan käyttää sed näin:

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

Annettu file nimellä

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

tämä luo newfile muodossa

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

sed -lauseke valitsee rivit, jotka alkavat merkkijonolla RESOURCE. Jokaisella tällaisella rivillä se korvaa sähköpostiosoitteen, jos se on rivillä. Korvauksessa käytetty malli varmistaa, että sovitamme = ja että osoite loppuu rivin lopussa.

Kommentit

  • En halua koodata osoitetta [email protected], sen pitäisi olla jotain nasir37 @ yahoo .com. Haluan korvata muilla, kuten [email protected]. Sen pitäisi olla dynaaminen – Lakshminarayana muokkaa juuri nyt
  • @Lakshminarayana Katso päivitetty vastaus.
  • En halua kirjoita se uuteen tiedostoon uudelleen .. koska tiedosto koostuu myös muista tiedoista. Se kuten alla.
  • @Lakshminarayana Suorita sitten sed -i -palvelun kanssa, jos luulet se ' tekee oikein, ja älä ' t ohjaa uuteen tiedostoon. I ' m välttää yleensä sed -i -palvelun käyttöä ' -tiloissa, joita ei kanneta, ja koska jos teet tyypin o, se voi tuhota alkuperäiset tietosi.
  • Ymmärrän sen. kuinka voin etsiä riviä, jolla on RESURSSI-sana. Minun on haettava se tiedostosta, jolla on muita tietoja, ja minun on korvattava se. Lisäksi minun on välitettävä tiedostonimi parametrina

Vastaa

sed -komento on parempi.

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

Yllä oleva toimii testissäni, mutta jos haluat testata sen itse, voit kokeilla tätä ensin:

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

Se kirjoittaa muutokset vakiotulosteeseen vaikuttamatta tiedostoon.

Kummassakin tapauksessa se antaa haluamasi muutoksen:

[email protected] 

Jos RESOURCE -arvon arvo on erilainen tiedostossa ja haluat muuttaa sen jotain erilaista:

grep RESOURCE= yourfile 

Tämä palauttaa rivin missä se on ja näyttää arvon.

Tämän jälkeen voit käyttää

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

Tulevaisuuden kannalta on tärkeää tehdä tämä kaikki selväksi alkuperäisessä kysymyksessäsi, jotta saat tarvitsemasi avun ilman tätä rigamarolia.

Kommentit

  • En halua koodata osoitetta [email protected], sen pitäisi olla jotain [email protected]. Haluan korvata muulla kuten [email protected]. sen pitäisi olla dynaaminen
  • En ymmärrä mitä tarkoitat '. Kysymyksessäsi se osoittaa, että haluat tuotoksen olevan [email protected], jonka molemmat vastaukset saavuttavat. Mitä tarkoitat: " En halua koodata [email protected] -koodia "? ja " sen pitäisi olla dynaaminen "?
  • @Lakshminarayana Jos haluat, että se todella tekee muutokset käytä sitten tiedostoa sed i kuten annoin ensimmäisessä komennossa. Testaa ensin ensin sed -sovelluksella itselleni toisessa komennossani varmistaaksesi, että se ' tekee mitä haluat, ja käytä sitten sed -i ensimmäisessä komennossani, kun olet ' varma, että se toimii.
  • tarkoitan, etten halua koodata kovasti niitä. sed ' s / RESOURCE = Lnreddy37 @ gmail.com / RESOURCE = reddy17777 @ gmail.com / ' tiedostosi. Haluan välittää sen kuten parametrit sekä tulo että lähtö.ja haluan myös etsiä sitä riviä, jolla minulla on RESURSSI ja minun täytyy korvata se
  • @Lakshminarayana Käytä sitten joko Kusalanandan vastauksia ' ja lähetä sähköpostiosoitteet muuttujaksi tai grep RESOURCE= file, hanki näkyviin tuleva sähköpostiosoite ja käytä sitten sed -i ja korvaa [email protected] ja [email protected] kaikilla, mitä siellä on ja mitä haluat.

Vastaa

Näytät siltä, että haluat korvata merkkijonon, joka näkyy =: n jälkeen, ei väliä mitä se on esimerkiksi , näytetiedoissa haluat korvata [email protected]. Mutta sanot, että riippumatta siitä, mikä merkkijono on =: n jälkeen, haluat korvata sen sanalla [email protected] – todennäköisesti haluat että kovakoodattu.

Tämän tekemiseen on muutamia muunnelmia. Yksinkertaisin on

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

joka (kuten kaikki alla olevat komennot) käyttää sitä, että .* tarkoittaa ”täsmää mikä tahansa onko siellä”. Jos et halua kirjoittaa RESOURCE= kahdesti, voit lyhentää yllä olevan sanan

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

mihin \(\) merkitsee osan hakumerkkijonosta ryhmänä (sinulla voi olla enintään yhdeksän ryhmää) ja \1 tarkoittaa korvaamista ensimmäisellä ryhmällä.

Yllä olevat komennot löytävät ja korvaavat RESOURCE= missä tahansa rivillä. Joten esimerkiksi syöte

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

muutetaan muotoon

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

Jos haluat sovittaa vain, kun RESOURCE= näkyy rivin alussa, käytä ^ :

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

tai

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

Jos haluat korvata vain resurssin arvon eikä koko rivin loppua – esim.

[email protected] [email protected] 

muotoon

[email protected] [email protected] 

myös tämä voidaan tehdä. Muokkaa kysymystäsi sanomaan tarkalleen, mitä haluat, täydellisillä, selkeillä selityksillä ja esimerkeillä.


OK, valitse jokin yllä olevista s -komennot. Jos haluat nyt muokata tiedostoa paikallaan (kuten olet ilmoittanut), tee

sed -i { s command } { yourfile }

Jos haluat luoda uuden tiedoston, tee

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

Älä itse kirjoita { ja } ; he ovat siellä vain rajaamista varten.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *