#linux #bash #file #echo
#linux #bash #файл #echo
Вопрос:
Я пытаюсь отредактировать файл с помощью команды echo, но когда я делаю
echo "hello" >> file.txt
это пропуск строки. Он печатает файл как:
banana
apple
hello
Я не уверен, что это из echo или файл заканчивается на » n», но я хотел бы написать чуть ниже остальной части текста:
banana
apple
hello
РЕДАКТИРОВАТЬ: теперь я вижу, что это не ошибка echo. Файл, вероятно, заканчивается символом «n». Есть ли способ обойти это? Могу ли я удалить это » n» или выбрать, в какой строке я хочу записать?
Комментарии:
1. Есть несколько способов удалить пустые строки из файла. Я бы посоветовал осмотреть этот сайт и unix.stackexchange.com .
2. Файл должен заканчиваться новой строкой. Похоже, что он заканчивается двумя символами новой строки.
3. Возможно, вам следует исправить то, что создало файл в первую очередь, чтобы он не добавлял пустую строку в конце.
Ответ №1:
Вот еще sed
один скрипт, который не жестко кодирует номера строк.
sed -i '' '${;s/^$/Hello/;t
i
Hello
}' file.txt
Вот краткая разбивка:
${
— действия в фигурных скобках должны применяться только к последней строке (выражение адреса$
)s/^$/Hello/
— если эта строка пуста, замените ее наHello
t
— если произошла подстановка, мы закончили (переход к концу скрипта)iHello
— вставитьHello
в новую строку (то есть, если мы не переходили на предыдущую строку)}
— конец фигурных скобок
Это проверено на macOS; синтаксис в других Unix, вероятно, будет немного отличаться. (В частности, в Linux -i
опция не ожидает и не требует аргумента. Кроме этого, скрипт работает как таковой на Debian. Некоторые из новых строк, вероятно, можно было бы удалить, и это все равно будет работать, но это необходимо для * BSD sed
.)
Ответ №2:
Я нашел способ sed
полностью использовать команду с wc -l file.txt
Команда
wc -l file.txt
возвращает номер строки file.txt (в моем примере перед echo было бы 2). И мы можем выбрать, в какую строку записать наш текст с помощью команды:
sed -i '2ihello' file.txt
это дало бы нам:
banana
hello
apple
чтобы получить то, что я хочу, можно сделать так:
echo "aux" >> file.txt
sed -i "3iHello" file.txt
sed '4d' file.txt
последняя команда удаляет строку 4, после чего файл становится:
banana
apple
Hello