Portál AbcLinuxu, 8. května 2025 06:55

Dotaz: BASH, SED, AWK.

10.2.2016 21:11 Pavel65
BASH, SED, AWK.
Přečteno: 1028×
Odpovědět | Admin
Zdravim a zadam vas o pomoc. Potrebuji v textovem souboru najit radek ktery obsahuje napr. wait SO[77] or SO[59] (navic se bohuzel ruzne cisla meni od SO[55-80], tak zrejme bude nutne je nejdrive testovat)a pred a po tomtu retezci vlozit novy radek s textem DO[200]=ON a OFF.

Tak aby vysledek byl takto:

DO[200]=ON (vlozit na novy radek pred nalezeny retezec)

wait SO[77] or SO[59] (nalezeny rezezec v textu)

DO[200]=OFF (vlozit na novy radek po nalezenem retezci)

Bohuzel v SEDu se mi to moc nedari (nejprve zlobi ty hranate uvozovky v textu) asi by bylo nejlepsi AWK, ale zatim jsem uplny zacatecnik. Predem dekuji za pomoc.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.2.2016 21:24 source
Rozbalit Rozbalit vše Re: BASH, SED, AWK.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nepomohlo by něco na styl najdi a nahraď? var = grep wait SO [*] %vypis všechny, kde to je

a pak to po jednom nahrazovat (teď si nevzpomenu hned na syntaxi) var[i] = DO[200]=ON \n var[i] \n DO[200]=OFF
10.2.2016 21:28 NN
Rozbalit Rozbalit vše Re: BASH, SED, AWK.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Plati pro nahodna dvouciferna cisla:
sed -r 's/^(wait S0[[][0-9]{2}] or S0[[][0-9]{2}])/DO[200]=ON\n\1\nDO[200]=OFF/g'
10.2.2016 21:48 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: BASH, SED, AWK.
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed -e '/SO\[[0-9]*\] or SO\[[0-9]*\]/i\DO[200]=ON' \
    -e '/SO\[[0-9]*\] or SO\[[0-9]*\]/a\DO[200]=OFF' <data.txt
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
11.2.2016 00:29 Pavel65
Rozbalit Rozbalit vše Re: BASH, SED, AWK.
Odpovědět | | Sbalit | Link | Blokovat | Admin
Děkuji všem mnohokrát.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.