Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Вставить текст в определённую строку из терминала  (Прочитано 2353 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн makla4nik

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
  • Linux Mint 18 KDE
    • Просмотр профиля
Всем добра! Начал я писать простенький скрипт, который из "голой" системы делает заточенную под производственные нужды машину. Суть вопроса в том, что нужно добиться того, чтобы в уже существующий системный скрипт по адресу "/etc/mdm/Init/Default" можно было вставить строку с командой. Команда эта должна выполняться до команды "exit 0" в уже существующем системном скрипте. Другими словами, мне нужно вставить строку /usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess в файл /etc/mdm/Init/Default перед последней строкой. Курил man по sed, который все яростно советуют в интернетах, но поскольку регулярки не знаю, к своему случаю применить не смог. Поиск по форуму тоже не дал результата. На крайний случай можно и заменить предпоследнюю строку (всё равно пустая), но как это сделать, не уяснил. Известно, что строк всего 46 в системном скрипте. Сначала хотел сделать это силами bash`a, но теперь уже плевать, честно говоря, лишь работало, главное, чтобы не нужно было дополнительно что-либо устанавливать в системе для этого.

Нашёл половину решения данного вопроса, вот код:
sed '44 a\ \//usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess' /etc/mdm/Init/DefaultПроисходит следующее - действительно вставляется строка сразу после 44-ой и видно это, поскольку результат команды выводится на экран. Но проблема в том, что при попытке записать вывод в текущий файл либо удаляют его содержимое (>), либо добавляют к существующему в файле вывод с экрана (>>). Как с этим бороться?
« Последнее редактирование: 13 Октября 2016, 19:03:58 от makla4nik »
прорвёмся!

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Ecли уверены что exit 0 на последней строке
Код: (bash) [Выделить]
sed -i '
$i\
/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
' /etc/mdm/Init/Default
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн makla4nik

  • Автор темы
  • Любитель
  • *
  • Сообщений: 64
  • Linux Mint 18 KDE
    • Просмотр профиля
спасибо, всё получилось! правда, немного изменил расстановку символов, для эстетичности и конечный результат выглядит так:
sed -i '$i\/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess' /etc/mdm/Init/Default
« Последнее редактирование: 13 Октября 2016, 19:19:58 от makla4nik »
прорвёмся!

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Более корректно
Код: (bash) [Выделить]
sed -i "
$(sed -n '/exit 0/=' flist | tail -1)i\
/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
' /etc/mdm/Init/Default

Пользователь добавил сообщение 13 Октября 2016, 19:58:26:
Ну или
Код: (bash) [Выделить]
tac /etc/mdm/Init/Default |
sed '
    1,/exit 0/{
        /exit 0/i\/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess
    }' |
tac >tmp
mv -f tmp /etc/mdm/Init/Default

Пользователь добавил сообщение 13 Октября 2016, 20:09:21:
Для новых версий sed можно и так
Код: (bash) [Выделить]
sed -zi '
s|\(.*\)\(exit 0\)|\1/usr/bin/x11vnc -dontdisconnect -notruecolor -noxfixes -shared -forever -rfbport 5900 -bg -o /var/log/x11vnc.log -auth guess\n\2|
' /etc/mdm/Init/Default
« Последнее редактирование: 13 Октября 2016, 20:09:22 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.044 секунд. Запросов: 23.