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

fotka

  • ***
  • 216
    • Zobrazit profil
    • Linux forum
    • E-mail
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
« Poslední změna: 01. 09. 2016, 14:09:05 od fotka »
Linux nováček - CeskeForum.com


gl

Kód: [Vybrat]
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
Kód: [Vybrat]
sed -e '/-t/! s/\.com\//\.com\/#/' -i *.txt
nebo o chlup prehledneji kdy misto bezneho sed oddelovaciho znaku / pouzita :
Kód: [Vybrat]
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
Kód: [Vybrat]
sed -e '/-t/! s:\.com/:.com/#:g' -i *.txt