Как добавить конечную новую строку в файлы, которые ее не имеют?

У меня есть проект Git, который содержит много файлов без трейлинга newlinegrep. Я хочу добавить завершающие символы новой строки, не добавляя лишних строк. Как я могу это сделать?

replace,newline,

1

Ответов: 1


1

Мне было удивительно сложно использовать инструменты, которые я обычно использовал ( sed, tail -c 1 file.txt | read || echo >> file.txt ), но элегантное решение существует с использованием стандартных команд оболочки:

tail
  1. read Выводит последний байт файла
  2. echoЧитает строку в переменную. Если указанная переменная указана, это не-op, но если EOF встречается перед новой строкой, выходит с кодом 1.
  3. file.txt Выполняется только в том случае, если чтение не выполняется (т. Е. Если последний символ не был символом новой строки) и добавляет новую строку в find

Найти -not -path "./.git/*" -type f -exec sh -c "grep -Iq. {} && (tail -c 1 {} | читать || echo >> {})" ; файлы, которые мы хотим изменить, вы можете использовать -not -path:

.git/
  1. -type fисключает -exec sh -c "...", с которыми мы не хотим
  2. grep -Iq . ограничивает поиск файлов
  3. . требуется объединить вместе команды, которые включают в себя каналы
  4. {}ищет что-либо ( .), так что нет-op, но выходит с кодом 1, если файл двоичный
  5. findотмечает позицию, в которую findбудет вставлять имя файла

Я бы посоветовал проверить список файлов перед запуском команды. Сделайте это путем замены echo >> {}с echo {}:

find -not -path "./.git/*" -type f -exec sh -c "grep -Iq . {} && (tail -c 1 {} | read || echo {})" ;
заменить символ новой строки,