Приветствую. Подскажите как лучше реализовать такую схему:
Есть директории, 1, 2, 3 и т.д с файлами list.txt в каждой директории, с содержимым в столбик.
dsadf
dfhdsdf
addgfgd
и т.д.Необходимо sed'om заменить определенные строки, в файлах, где есть определенная строка (в любом месте файла, а не в определенной строке.)
sed '/baz/s/foo/bar/g' -- действует только на строку.
Спасибо.
>[оверквотинг удален]
> Есть директории, 1, 2, 3 и т.д с файлами list.txt в каждой
> директории, с содержимым в столбик.
> dsadf
> dfhdsdf
> addgfgd
> и т.д.
> Необходимо sed'om заменить определенные строки, в файлах, где есть определенная строка
> (в любом месте файла, а не в определенной строке.)
> sed '/baz/s/foo/bar/g' -- действует только на строку.
> Спасибо.Так а разве модификатор g не говорит о том, что замена глобальная, во всех строках?
>[оверквотинг удален]
>> dsadf
>> dfhdsdf
>> addgfgd
>> и т.д.
>> Необходимо sed'om заменить определенные строки, в файлах, где есть определенная строка
>> (в любом месте файла, а не в определенной строке.)
>> sed '/baz/s/foo/bar/g' -- действует только на строку.
>> Спасибо.
> Так а разве модификатор g не говорит о том, что замена глобальная,
> во всех строках?Мне не нужно заменять во всех строках.
Суть в том, что если в файле есть строка, допустим
baz
То необходимо будет заменить строку
foo на bar
А если в файле нет упоминания про baz, не делать никаких замен.
>>[оверквотинг удален]find . -name list.txt -exec sed -e '/baz/s/foo/bar/g' -i {} \;
>[оверквотинг удален]
>>> sed '/baz/s/foo/bar/g' -- действует только на строку.
>>> Спасибо.
>> Так а разве модификатор g не говорит о том, что замена глобальная,
>> во всех строках?
> Мне не нужно заменять во всех строках.
> Суть в том, что если в файле есть строка, допустим
> baz
> То необходимо будет заменить строку
> foo на bar
> А если в файле нет упоминания про baz, не делать никаких замен.sed 's/foo/bar/g' `grep -x -l baz *`
>[оверквотинг удален]
>>>> Спасибо.
>>> Так а разве модификатор g не говорит о том, что замена глобальная,
>>> во всех строках?
>> Мне не нужно заменять во всех строках.
>> Суть в том, что если в файле есть строка, допустим
>> baz
>> То необходимо будет заменить строку
>> foo на bar
>> А если в файле нет упоминания про baz, не делать никаких замен.
> sed 's/foo/bar/g' `grep -x -l baz *`Вот так правильно
sed -i '' 's/foo/bar/g' `grep -l baz basedir/*/*`
>[оверквотинг удален]
> Есть директории, 1, 2, 3 и т.д с файлами list.txt в каждой
> директории, с содержимым в столбик.
> dsadf
> dfhdsdf
> addgfgd
> и т.д.
> Необходимо sed'om заменить определенные строки, в файлах, где есть определенная строка
> (в любом месте файла, а не в определенной строке.)
> sed '/baz/s/foo/bar/g' -- действует только на строку.
> Спасибо.find basedir/ -type f -name list.txt|xargs -r grep -l "baz"|xargs -r sed -i 's/foo/bar/g'
Брр. Строка в строке. Может, вы имели ввиду "..где есть определённое слово"?