Назад | Перейти на главную страницу

sed: добавить новую строку в каждый файл, у которого нет строки в конце файла

Я получаю бесчисленное количество

предупреждение: нет новой строки в конце файла

Из кода, который последний раз редактировался в 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 {}