Позвольте мне прояснить характер новой строки:
$ echo Hello > file1 ; cat file1
Hello
$ echo -n Hello > file2 ; cat file2
Hello$
Здесь вы можете увидеть, что file1
в конце file2
есть символ новой строки, а не имеет.
Теперь предположим, что я один file
:
$ cat file
Hello
Welcome to
Unix
$
И я хочу добавить and Linux
в конце файла, а затем echo " and Linux" >> file
будет добавлен в новую строку . Но я хочу, чтобы последняя строкаUnix and Linux
Итак, чтобы обойти, я хочу удалить символ новой строки в конце файла. Следовательно, как мне удалить символ новой строки в конце файла?
sed '$s/$/ and linux/'
Ответы:
Если все, что вы хотите сделать, это добавить текст в последнюю строку, это очень просто с помощью sed. Замените
$
(сопоставление с образцом в конце строки) текстом, который вы хотите добавить, только в строках диапазона$
(что означает последнюю строку).который в Linux может быть сокращен до
Если вы хотите удалить последний байт в файле, Linux (точнее, GNU coreutils) предлагает
truncate
команду, которая делает это очень просто.POSIX способ сделать это с
dd
. Сначала определите длину файла, а затем обрежьте его до одного байта меньше.Обратите внимание, что оба они безусловно обрезают последний байт файла. Вы можете сначала проверить, что это новая строка:
источник
perl -pi -e 'chomp if eof' myfile
. По сравнению сtruncate
илиdd
это не оставит вас с испорченным файлом, если наmyfile
самом деле не было завершающих строк.Тем не менее, вы можете удалить символ новой строки из строки
tr -d '\n'
:Вы можете удалить символ новой строки в конце файла следующим простым способом:
head -c -1 file
От
man head
:truncate -s -1 file
от
man truncate
:источник
head -c -1 file | tee file
безопасно? Неtee
обрезать файл перед запуском?tee
нужно только открыть файл, аhead
читать и записать его содержимое,tee
на практике выиграет гонку, за исключением иногда очень маленьких файлов.Вы можете достичь этого с помощью Perl как:
По сравнению с
truncate
илиdd
это не оставит вас с испорченным файлом, если наmyfile
самом деле не было завершающих строк.(ответ построен на основе комментария и основан на этом ответе )
источник
Вот один из способов
sed
- в последней ($
) строке файла выполнить поиск и заменить что угодно и все (.*
) на «все, что вы сопоставили», а затем «и Linux»:Еще более простое решение, предоставленное Исааком :
Это заменяет (символический) конец строки заданным текстом.
источник