Использование:
sed '/^<?xml/d' filename
В GNU sed, \?
означает ноль или один из предшествующих символов. (В POSIX sed \?
не определено.) Поскольку вы хотите сопоставить литерал ?
, оставьте его без экранирования.
Рассмотрим этот тестовый файл:
$ cat filename
<?xml deleteme
<.xml keepme
..xml keepme
Приведенное выше решение дает желаемый результат:
$ sed '/^<?xml/d' filename
<.xml keepme
..xml keepme
Первая команда в вопросе неверно не дает результатов:
$ sed '/<\?xml/d' filename
$
Это потому, что она соответствует всем строкам, содержащим xml
, которому может предшествовать <
. Поскольку все строки содержат xml
, все они удаляются.
Вторая команда ничего не удаляет:
$ sed '/^<\?xml/d' filename
<?xml deleteme
<.xml keepme
..xml keepme
Удаляет любую строку, которая начинается с нуля или единицы <
, за которой сразу следует xml
. Поскольку в строках всегда есть хотя бы один символ между <
и xml
, никакие строки не удаляются.
Если вы не уверены, является ли символ активным регулярным выражением, и хотите его деактивировать, безопаснее всего заключить его в квадратные скобки:
$ sed '/^[<][?]xml/d' filename
<.xml keepme
..xml keepme
Внутри [ ...]
, все символы рассматриваются как буквальные символы.
Вы можете добавить этот скрипт в/etc/crontab
:
@reboot /path/to/your/start.sh
Из man 5 crontab:
@reboot : Run once after reboot.
Была такая же проблема, нашел решение в этом посте в другом месте.
Резюме:
sudo vim /etc/systemd/system/rc-local.service
Затем добавьте к нему следующее содержимое.
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Примечание. :Начиная с версии 16.10 Ubuntu больше не поставляется с файлом /etc/rc.local. То же самое для других дистрибутивов, таких как Kali. Вы можете создать файл, выполнив эту команду.
printf '%s\n' '#!/bin/bash' 'exit 0' | sudo tee -a /etc/rc.local
Затем добавьте разрешение на выполнение в файл /etc/rc.local.
sudo chmod +x /etc/rc.local
После этого включите службу при загрузке системы:
sudo systemctl enable rc-local
Наконец, запустите службу и проверьте ее статус:
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
Полный пост вhttps://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd