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
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 ensinsed
-sovelluksella itselleni toisessa komennossani varmistaaksesi, että se ' tekee mitä haluat, ja käytä sittensed -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ä sittensed -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.
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.