Portál AbcLinuxu, 10. května 2025 19:23

Dotaz: Regulární výraz s podmínkou

20.2.2014 16:37 Dave
Regulární výraz s podmínkou
Přečteno: 230×
Odpovědět | Admin
Ahoj,

potřebuju nahradit v textu výskyt daného řetězce obsahem proměnné. Navíc pouze na řádcích, které nejsou komentáře (nezačínají znakem #).

Zatím jsem se dopracoval k tomuto:

sed '/#/!s/text/$VAR/'

ale samozřejmě se v tomto výrazu nenahrazuje obsah proměnné. Když zkusím

sed "/#/!s/text/$VAR/"

tak mi bash píše chybu

bash: !s/text/$VAR/": event not found"

Navíc proměnná obsahuje zpětná lomítka, takže bych potřeboval použít jiný delimiter než lomítko, a to nefunguje ani ve variantě s apostrofy. Jak na to?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.2.2014 16:39 Dave
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Malá oprava, proměnná samozřejmě obsahuje lomítka, ne zpětná lomítka.
Řešení 1× (Tarmaq)
20.2.2014 17:04 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
sed -e "/#/! s/text/${VAR//\//\\/}/"

Jiný oddělovač by fungovat měl, např. pokud proměnná neobsahuje podtržítko, tak

sed -e "/#/! s_text_${VAR}_"

(v tomto případě jsou potřeba složené závorky, protože podtržítko může být součástí jména proměnné)

20.2.2014 17:18 Dave
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
Díky moc, chyba u mě byla v těch chybějících složených závorkách!
20.2.2014 17:17 mhepp | skóre: 22
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co takhle:

sed '/#/!s/text/'$VAR'/'

20.2.2014 17:27 Dave
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
Taky funguje, díky!
20.2.2014 18:33 u2
Rozbalit Rozbalit vše Re: Regulární výraz s podmínkou
A nemelo by tam byt spis sed '/^#/!s/text/'$VAR'/'

tj. opravdu jen radky ktere zacinaji # ? Takhle to ignoruje uplne cele radky ktere ten "komentar" maji i nekde dale.

Ovsem pokud je akceptovatelny i komentar na konci radku, tak to ani jednim zpusobem nepujde, protoze se na takovem radku bud nahradi text v komentari i v kodu(?) a nebo ani v jednom.

Pak by to zrejme resilo napr.:

sed -r 's/^([^#]*)text/\1'$VAR'/'

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.