#!/bin/bash
for f in *.h
do
line=`grep -n '^#' $f | tail -1 | cut -f1 -d:`
head -$line $f > tempfile
echo 'namespace foo {' >> tempfile
let line++
tail --lines=+$line $f >> tempfile
echo '} // end namespace foo' >> tempfile
mv tempfile $f
done
Это будет проходить через каждый заголовочный файл в текущем каталоге, и:
- найти последнюю строку препроцессора (она также начинается с '#')
- выгрузить первую часть файла во временный файл
- добавить строку, чтобы открыть пространство имен
- добавить оставшуюся часть существующего файла
- добавить строку, чтобы закрыть пространство имен
- замените файл временным файлом
Обратите внимание, что если вы хотите использовать и файлы cpp, первая строка должна быть for f in *.h *.cpp
.Но если ваши cpp-файлы имеют статические функции или анонимное пространство имен, то это не сработает.
Обратите внимание, что это предполагает, что ваши заголовочные файлы не защищены классической защитой включения.Предполагается, что все команды препроцессора находятся в верхней части файла.Если это не так, вам придется внести некоторые коррективы.Попробуйте это на некоторых ваших файлах, настройте по мере необходимости, и попробуйте еще несколько.