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
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 ased
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.
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.
sed -i
fájlt ‘ helyesen cselekszik, és ne ‘ ne irányítson át egy új fájlt. I ‘ m általában kerüli ased -i
használatát, mivel ‘ nem hordozható, és mivel gépel o, tönkreteheti eredeti adatait.