Bash, jak nahradit řetězec v souboru pouze pokud linka NEobsahuje určitou frázi?

fotka

  • ***
  • 216
Dobrý den,

chtěl bych poprosit o radu.
Na Linux serveru mám v adresáři více souborů v nichž potřebuji provést nahrazení určité fráze/řetězce pouze pokud daná linka (souboru) na které se fráze nachází, NEobsahuje frázi "-t"

Nahrazovat budu ".com/" za ".com/#" a aby bylo nahrazení provedeno, linka na které .com/ bude nalezeno nesmí obsahovat "-t"

Potřebuji aby ta podmínka "-t" byla opravdu na danou linku ne celý obsah souboru a soubor obsahuje několik .com/ takže více nahrazení na soubor

Jaký příkaz mohu prosím použít?

děkuji
Linux nováček - CeskeForum.com


gl


perl -i -pe 's/\.com\//$&#/ unless /-t/' *txt

nobody(ten pravej)

sed umoznuje pridat filter kdy nejdriv hleda jestli na radku je retezec a pak teprve provede nahrazeni jineho retezce... pro pripad NEni je negace pomoci znaku vykricnik
sed -e '/-t/! s/\.com\//\.com\/#/' -i *.txt

nebo o chlup prehledneji kdy misto bezneho sed oddelovaciho znaku / pouzita :
sed -e '/-t/! s:\.com/:.com/#:' -i *.txt

pokud by to melo nahrazovat vice adres na jednom radku, pridal by se nakonec parametr g jako global
sed -e '/-t/! s:\.com/:.com/#:g' -i *.txt