Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: fotka 01. 09. 2016, 14:02:25

Název: Bash, jak nahradit řetězec v souboru pouze pokud linka NEobsahuje určitou frázi?
Přispěvatel: fotka 01. 09. 2016, 14:02:25
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
Název: Re:Bash, jak nahradit řetězec v souboru pouze pokud linka NEobsahuje určitou frázi?
Přispěvatel: gl 01. 09. 2016, 14:28:37
Kód: [Vybrat]
perl -i -pe 's/\.com\//$&#/ unless /-t/' *txt
Název: Re:Bash, jak nahradit řetězec v souboru pouze pokud linka NEobsahuje určitou frázi?
Přispěvatel: nobody(ten pravej) 01. 09. 2016, 16:21:18
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