Я получаю бесчисленное количество
предупреждение: нет новой строки в конце файла
Из кода, который последний раз редактировался в Windows.
Как в Linux исправить все эти файлы cpp / h и добавить новую строку в конец каждого файла, в котором нет новой строки?
Я пытался использовать sed:
find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs sed -i -e "$G"
Но я еще не получил его.
В отсутствие dos2unix
- что было бы идеальным способом, попробуйте:
find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -iFILE sh -c 'echo >> FILE'
или
find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -exec sh -c 'echo >> {}' \;
Обратите внимание, что перенаправление всегда является проблемой - замена не происходит должным образом без запуска новой оболочки.
Поскольку ваш вопрос был о sed, вы также можете сделать это как:
find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 sed -i -e '$a\
\'
(Это буквальный символ новой строки - не \ n или что-то еще - вероятно, лучше всего сделать как скопировать и вставить - так как это может быть довольно сложно ввести :).
find . \( -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print | xargs dos2unix {}