echo "abc" >>file.txtставить новий рядок після abc , не раніше. Якщо ви закінчилися з abcйого власним рядком, це означає, що новий рядок раніше abcвже був у file.txt.
Зауважте, що цілком нормально, щоб текстовий файл закінчувався в новому рядку. У unix рядок складається з послідовності символів, відмінних від null⁰ або newline, за якими слідує новий рядок. 1 Отже, будь-який не порожній текстовий файл закінчується символом нового рядка.
Якщо ви хочете додати текст до останнього рядка файла, ви не можете це зробити >>, оскільки це завжди додається до файлу, тому він завжди записується після останнього нового рядка. Натомість вам потрібен інструмент, який здатний змінювати існуючий файл. Наприклад, ви можете використовувати sed :
sed '$ s/$/abc/' file.txt >file.txt.new && mv file.txt.new file.txt
У команді sed перший $означає "виконати наступну команду лише в останньому рядку", команда s/REGEX/REPLACEMENT/замінює REGEX на ЗАМОВЛЕННЯ, а регулярний вираз $відповідає в кінці рядка.
Команда sed Linux має вбудовану функцію для автоматизації цієї послідовності створення нового файлу та заміни, тож ви можете скоротити її до
sed -i '$ s/$/abc/' file.txt
⁰ Це нульовий байт, який ASCII називає NUL, а Unicode викликає U + 0000. Програми обробки тексту можуть або не можуть впоратися з цим символом.
1 Див. Визначення символів текстового файлу , рядка та нового рядка в розділі "Визначення" розділу " Основні визначення " IEEE 1003.1-2008: 2016.