Как я мешаю sed добавить дополнительные символы новой строки

Этот вопрос ранее задали на форуме Суперпользователя.

Заключение в кавычки из ответа @grawity по тому вопросу:

При вызове программы через xargs stdin программы (стандартный вход) указывает на/dev/null. (Так как xargs не знает исходный stdin, он делает следующую лучшую вещь.)

Vim ожидает, что его stdin совпадет с его терминалом управления и выполняет различный связанный с терминалом ioctl's на stdin непосредственно. При выполнении на/dev/null (или любой non-tty дескриптор файла), те ioctls бессмысленны и возвращают ENOTTY, который тихо проигнорирован.

Это упоминается в страницах руководства для xarg. От OSX/BSD:

- o Вновь открыли stdin как/dev/tty в дочернем процессе прежде, чем выполнить команду. Это полезно, если Вы хотите, чтобы xargs запустил интерактивное приложение.

Следовательно, на OSX, Вы могли использовать следующую команду:

find . -name "php.ini" | xargs -o vim

В то время как, нет никакого прямого переключателя на версии GNU, эта команда будет работать. (Удостоверьтесь, что включали dummy строка, иначе это отбросит первый файл.)

find . -name "php.ini" | xargs bash -c '

Вышеупомянутыми решениями является любезность Jaime McGuigan на SuperUser. Добавление их здесь для любых будущих посетителей, ищущих сайт эту ошибку.

17
04.11.2013, 13:05
3 ответа

Необходимо считать себя удачливыми тот AIX sed добавленный тот недостающие символы новой строки.

Непустой файл, который не заканчивается в символе новой строки, не является текстовым файлом (по крайней мере, согласно определению POSIX текстового файла), поскольку текстовый файл предназначен для содержания строк, и строки являются (не слишком долго) последовательностью символов, завершенных символом новой строки, таким образом, поведение текстовых утилит как sed на нем является неуказанным и на практике варьируется от реализации до реализации.

Некоторые sed реализация уволила бы их побочный символ после последней строки.

AFAIK, xml файлы предназначены, чтобы быть текстовыми файлами, так, чтобы средства sed просто зафиксированный это для Вас.

Если Вам нужен тот файл для не окончания в символе новой строки, то Вы могли использовать perl или другие инструменты, которые могут справиться с нетекстовыми данными.

perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'
12
27.01.2020, 19:47

Вот способ удалить заключительную новую строку из использования файла dd:

printf "" | dd  of='/path/to/file' seek=<filesize_in_bytes - 1> bs=1 count=1

Чтобы протестировать, заканчивается ли файл новой строкой, которую Вы могли бы использовать:

tail -c 1 /path/to/file | tr -dc '\n' | wc -c

И получить размер файла в использовании байтов:

wc -c < /path/to/file
0
27.01.2020, 19:47
[1172401] Согласно этому [1172775] AIX-руководству [1172776] IBM's [1172777] хвост [1172778] делает [1172779]-r[1172780]-всегда - что выглядит довольно круто. Пока ваш файл меньше 20KB, должно работать:

0
27.01.2020, 19:47

Теги

Похожие вопросы