Задать вопрос
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.

Утилита sed — как добавить строку с табуляцией и бэкслешем после строки, содержащей бэкслеш?

Добрый день, коллеги! Пишу скрипт postinstall и стоит задача после
default:\
вставить строки
\t:charset=UTF-8:\
\t:lang=ru_RU.UTF-8:\
Сразу уточню: GNU sed не предлагать.

Если что, файл /etc/login.conf система OpenBSD

Пока получается так:
sed -i.bak '/default/a lang=ru_RU.UTF-8' /etc/login.conf
sed: 1: "/default/a lang=ru_RU.UTF-8": command a expects \ followed by text
Где я ошибся?

UPD. Нашёл, что срабатывает многострочная команда - хотелось бы в одной строке.

UPD-2. Поставил на другом хосте GNU sed (gsed) и убедился, что он отрабатывает как надо.
Думаю, насколько этично будет его использовать.
Альтернативный вариант - скачивать готовый исправленный login,conf
Но тут уж вопрос о том, насколько большие различия в этом файле от версии к версии OpenBSD.
  • Вопрос задан
  • 93 просмотра
Подписаться 1 Средний 4 комментария
Решения вопроса 2
saboteur_kiev
@saboteur_kiev
software engineer
sed '/default:/a\
\\t:charset=UTF-8:\\ \
\\t:lang=ru_RU.UTF-8:\\ \
'  /etc/login.conf
Ответ написан
Вот пример как сделать чтоб и проверка как завершилась команда, тут лишнее есть но думаю запись чтения с бд просто удалишь.

Пример раз
#!/bin/sh

# Создаём резервную копию
cp /etc/login.conf /etc/login.conf.bak

ed
# Используем ed для редактирования файла
ed /etc/login.conf <<EOF
/^\s*default:/
a
\t:charset=UTF-8:
\t:lang=ru_RU.UTF-8:
.
w
q
EOF

Вот еще через awk

Пример два

#!/bin/sh

# Создаём резервную копию
cp /etc/login.conf /etc/login.conf.bak

# Используем awk для редактирования
awk '/^default:/{print; print "\t:charset=UTF-8:\n\t:lang=ru_RU.UTF-8:"; next} 1' /etc/login.conf > /tmp/login.conf && mv /tmp/login.conf /etc/login.conf


Не проверял но по идее должно работать.
Так же не забывай запускать перед скриптом screen
Но зато очень удобно вызывать и отлаживать .
https://top-engineer.com/test2/1.sh
а тут я скинул тебе примр с статусами кометами по кажодой команде
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Так эскейпы вставляйте. И разделение строк \n

sed -i.bak '/default:\\/\\t:charset=UTF-8:\\\n\\t:lang=ru_RU.UTF-8' /etc/login.conf

если я правильно понял...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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