Van egy fájlom, amelynek RESOURCE kulcsszava van. A fájl bármely pontján előfordulhat, például:

[email protected] 

Most a [email protected] szöveget [email protected]. Meg kell keresnem azt a sort, ahol megtalálhatom a RESOURCE kulcsszót, majd az egyenlőségjel után helyettesítem a szót. A RESOURCE kulcsszónak módosítatlanul kell maradnia.

Tudna valaki segíteni ebben?

input:

[email protected] 

Kimenet:

[email protected] 

Válasz

grep ebben az esetben nem hasznos, mivel nem teszi lehetővé a fájl tartalmának módosítását.

Ehelyett használhatja a sed így:

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

Adva file mint

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

ez létrehozza newfile mint

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

A sed kifejezés olyan sorokat választ ki, amelyek a RESOURCE karakterlánccal kezdődnek. Minden ilyen sor esetén az e-mail címet helyettesíti, ha az szerepel a sorban. A helyettesítéshez használt minta biztosítja, hogy egyezzünk a = és a cím véget ér a sor végén.

Megjegyzések

  • Nem akarom keményen kódolni az [email protected] weboldalt, bármi legyen, mint nasir37 @ yahoo .com. Bármely másra szeretnék cserélni, például [email protected]. Dinamikusnak kell lennie – Lakshminarayana most szerkesztette
  • @Lakshminarayana Lásd a frissített választ.
  • Nem akarom írd be újból egy új fájlba .. mert a fájl más adatokból is áll. Ez hasonlít az alábbiakhoz.
  • @Lakshminarayana Ezután futtasd a sed -i fájlt ‘ helyesen cselekszik, és ne ‘ ne irányítson át egy új fájlt. I ‘ m általában kerüli a sed -i használatát, mivel ‘ nem hordozható, és mivel gépel o, tönkreteheti eredeti adatait.
  • Ezt megértem. hogyan kereshetem meg azt a sort, amelyiken szerepel a FORRÁS szó. Olyan fájlban kell keresnem, amely más adatokkal rendelkezik, és ki kell cserélnem. Ezenkívül át kell adnom a fájl nevét paraméterként

Válasz

A sed parancs jobb.

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

A fentiek működnek a tesztemben, de ha magad akarod tesztelni, akkor először ezt próbáld ki:

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

Ez a szabványos kimenet módosításait írja be anélkül, hogy befolyásolná a fájlt.

Akárhogy is, megadja a kívánt változtatást:

[email protected] 

Ha a RESOURCE értéke eltér a fájlban, és valami mást szeretnél megváltoztatni, akkor:

grep RESOURCE= yourfile 

Ez visszaadja a sort, ahol van, és megmutatja az értéket.

Ezután használhatja a

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

A későbbi felhasználás érdekében fontos, hogy mindezt egyértelművé tegye eredeti kérdésében, hogy a szükséges rigamarol nélkül is megkaphassa a szükséges segítséget.

Megjegyzések

  • Nem akarom keményen kódolni az [email protected] weboldalt, ennek olyannak kell lennie, mint a [email protected]. Szeretnék cserélni bármilyen másra, például a [email protected]. legyen dinamikus
  • Nem értem ‘, hogy mire gondolsz. Kérdésében azt mutatja, hogy azt szeretné, hogy a kimenet [email protected] legyen, amelyet mindkét válasz elér. Mit értesz ezzel: ” Nem akarom hardveresen kódolni az [email protected] “? és ” dinamikusnak kell lennie “?
  • @Lakshminarayana Ha azt akarja, hogy valóban módosítsa a fájl, majd használja az sed i parancsot, mint ahogy azt az első parancsomban megadtam. Először tesztelje a sed vel önmagában a második parancsomban, hogy megbizonyosodjon arról, hogy ‘ azt csinál, amit akar, majd használja a div id = “6725e0b27e”>

az első parancsomban, ha ‘ biztos benne, hogy működik.

  • úgy értem, hogy nem akarok hardveres kódot őket. sed ‘ s / RESOURCE = Lnreddy37 @ gmail.com / RESOURCE = reddy17777 @ gmail.com / ‘ fájlja. szeretném átadni, mint a bemenet és a kimenet paramétereit.és azt a sort is meg akarom keresni, ahol van erőforrásom, és ki kell cserélnem
  • @Lakshminarayana Ezután vagy használja a Kusalananda ‘ választ, és továbbítja az e-mail címeket változóra vagy grep RESOURCE= file, kérje le a megjelenő e-mail címet, majd használja a sed -i elemet, és cserélje le a [email protected] és [email protected] mindennel, amivel csak van, és bármi is legyen, amire vágysz.
  • Válasz

    Úgy tűnik, azt akarja mondani, hogy le akarja cserélni a = után megjelenő karakterláncot, nem számít mi ez például , a mintaadatokban a [email protected]. De te ezt mondod, függetlenül attól, hogy milyen karakterlánc van a = után, azt le kell cserélni a következőre: [email protected] – láthatóan hogy kemény kódolású.

    Néhány variáció van ennek módjáról. A legegyszerűbb a

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

    , amely (mint az összes alábbi parancs) azt a tényt használja, hogy a .* azt jelenti, hogy van”. Ha nem akarja kétszer beírni a RESOURCE= szót, akkor a fentieket lerövidítheti

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

    ahol \(\) a keresési karakterlánc egy részét csoportként jelöli (legfeljebb kilenc csoport lehet), és \1 azt jelenti, hogy cserélni kell az első csoportra.

    A fenti parancsok megtalálják és helyettesítik a RESOURCE= elemeket, bárhol is jelenik meg a sorban. Tehát például a bemenet

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

    a következőre módosul:

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

    Ha csak akkor akar egyeztetni, ha a sor elején megjelenik a RESOURCE=, használja a ^ :

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

    vagy

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

    Ha csak az erőforrás értékét akarja lecserélni, és nem a sor teljes részét – pl.

    [email protected] [email protected] 

    a

    [email protected] [email protected] 

    ez is elvégezhető. Szerkessze a kérdését, hogy pontosan elmondja, amit szeretne, teljes, világos magyarázatokkal, és példákkal.


    OK, válassza a fenti s parancsokat. Most, ha a helyén szeretné szerkeszteni a fájlt (ahogy jelezte), tegye a következőket:

    sed -i { s command } { yourfile }

    Ha új fájlt szeretne létrehozni, tegye a

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

    Ne írja be a { és } ; csak a körülhatárolás miatt vannak.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük