sed - nahrazení stringu

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
sed - nahrazení stringu
« kdy: 02. 10. 2019, 13:20:59 »
snažím se pomocí sedu vložit záznam do souboru:
Kód: [Vybrat]
sed -i '/quiet showopts/quiet showopts intel_idle.max_cstate=1 processor.max_cstate=1/' /etc/default/grub
ale vrátí mi to:
sed: -e expression #1, char 18: extra characters after command

Předpokládám, že budu muset nějaké znaky escapovat. Poradil by někdo jak na to?...na regex a podobné nejsem vůbec zdatný

a nejlépe bych uvítal, zda lze sedem namísto nahrazení textu spíše najít řetězec a za něj doplnit další
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #1 kdy: 02. 10. 2019, 13:37:00 »
Kód: [Vybrat]
sed -i 's/\/quiet showopts\/quiet showopts intel_idle.max_cstate=1 processor.max_cstate=1/naky_blbosti/g' /etc/default/grub


nebo tak neco
« Poslední změna: 02. 10. 2019, 13:40:11 od robin martinez »
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

robin martinez

  • *****
  • 1 138
  • Have you hugged your toilet today?
    • Zobrazit profil
    • Null Storage
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #2 kdy: 02. 10. 2019, 13:44:41 »
jinak ten append:

Kód: [Vybrat]
sed -i '/quiet showopts\/quiet showopts intel_idle\.max_cstate=1 processor\.max_cstate=1/s/$/ NECO/' /etc/default/grub
One machine can do the work of fifty ordinary men. No machine can do the work of one extraordinary man.

I do Linux, Hardware and spaghetti code in PHP, Python and JavaScript

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #3 kdy: 02. 10. 2019, 14:07:05 »
DÍKY!
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #4 kdy: 02. 10. 2019, 20:51:00 »
nevim jestli dotaz spatne pochopil "robin martinez", nebo ja :-) ale predpokaldam ze jsi NEchtel nahrazovat string
"/quiet showopts/quiet showopts intel_idle.max_cstate=1 processor.max_cstate=1/"
za
"neco jineho"
protoze na to by bylo co robin psal, tedy escapovat / nahrazovaneho stringu

ja to chapu tak ze v /etc/default/grub chces na radku obsahujici GRUB_CMDLINE_LINUX_DEFAULT za stavajici parametry "quiet showopts" pridat "intel_idle.max_cstate=1 processor.max_cstate=1"

pak by v tvem prikladu pouze schazel sed prikaz "s" urcujici ze ma "najit a nahradit"

Kód: [Vybrat]
sed -i 's/quiet showopts/quiet showopts intel_idle.max_cstate=1 processor.max_cstate=1/' /etc/default/grub
pokud bys chtel navic osetrit aby sed menil "quiet showopts" pouze na radku opravdu opsahujici GRUB_CMDLINE_LINUX_DEFAULT (i kdyz v tvem konkretnim pripade bude "quiet showopts" vzdy jen na tomto radku), tak pred s aka hledej_a_nahrad, pridas at zpracovava jen radky to obsahujici:

Kód: [Vybrat]
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/s/quiet showopts/quiet showopts intel_idle.max_cstate=1 processor.max_cstate=1/' /etc/default/grub


k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #5 kdy: 02. 10. 2019, 20:58:46 »
pripadne pokud bys nevedel zda tam budes mit "quiet showopts" tak pridavat obecna na radek s GRUB_CMDLINE_LINUX_DEFAULT na konec parametru:

sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/s/"$/ intel_idle.max_cstate=1 processor.max_cstate=1"/' /etc/default/grub

tedy nahradit uvozovku na konci radku za: mezera parametry uvozovka

Re:sed - nahrazení stringu
« Odpověď #6 kdy: 10. 10. 2019, 12:23:37 »
Podle me je i lomitko / i tecka znak, ktery ma nejaky obecnejsi funkce (i v grep tomu tak je), proto je dat potreba pred tyto znaky zpetne lomitko, jak uz tu nekdo napsal. Vystup jsem pak vzdy do ciloveho souboru presmerovaval >>. Nevim, jak je to s postnutim takto.

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #7 kdy: 10. 10. 2019, 12:54:49 »
nebo pouzit jiny znak na ohraniceni regexpu.

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:sed - nahrazení stringu
« Odpověď #8 kdy: 10. 10. 2019, 18:58:43 »
@Honza1Ubuntu, @gill ja tedy nevim jiste kdyz se tazatel uz neozval, ale kdyz se podivate na to bez toho ze je potreba resit / nevidite ze pridava kernel parametry k existujicim a nahrazovanej ani pridavanej retezec NEobsahuje / ? :-) proste ma BayTrail co tuhne kdyz jde do nizsiho cstavu, takze ho chce omezit na 1 pridanim tech tvou *max_state* parametru...