Удаление строки из нескольких файлов с помощью grep & sed - PullRequest
0 голосов
/ 06 января 2012

У меня есть несколько файлов исходного кода в многоуровневом каталоге, которые содержат прямое объявление функции

extern "C" void myPrintf(char *fmt, ...);

Я хочу удалить это объявление из всех файлов. Я мог бы сделать grep, который печатает строку, содержащую это объявление для всех файлов, но не уверен, как передать его с помощью sed, чтобы получить желаемый результат.

Ответы [ 2 ]

1 голос
/ 06 января 2012

с GNU sed

sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' *.c

Если вы хотите выполнить это рекурсивно, у вас есть два варианта:

С Bash 4.X

shopt -s globstar; sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' **.c

С находкой

find /some/path -type f -name "*.c" -exec sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' {} \;
0 голосов
/ 06 января 2012

Использование awk:

awk '/void myPrintf/{next}1' oldfile > newfile

Для пакетных обновлений , вы можете сделать что-то вроде этого -

find /path/to/files -type f -iname "*.c" | while read file; do
awk '/void myPrintf/{next}1' "$file" > "$file".new
mv "$file".new "$file"
done
...