Как сопоставить и заменить значение атрибута внутри тега

Как предположил @Gilles , он более подходит для запуска по запросу, особенно когда вы используете его для тестирования Selenium. Вот пример команд оболочки:

export DISPLAY=:99
xdpyinfo -display $DISPLAY > /dev/null || Xvfb $DISPLAY -screen 0 1024x768x16 &

Проверка отображения с помощью xdpyinfo перед тем, как убедиться, что вы не запускаете виртуальный буфер кадра дважды.


Если вам действительно нужно запускать его при запуске, вы можете попробовать следующий сценарий init.d :

#!/bin/sh
XVFB=/usr/bin/Xvfb
XVFBARGS=":1 -screen 0 1024x768x24 -ac +extension GLX +render -noreset -nolisten tcp"
PIDFILE=/var/run/xvfb.pid
case "$1" in
  start)
    echo -n "Starting virtual X frame buffer: Xvfb"
    start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
    echo "."
    ;;
  stop)
    echo -n "Stopping virtual X frame buffer: Xvfb"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE
    echo "."
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
        echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
        exit 1
esac

exit 0

Источник: dloman / xvfb на GitHub (разветвлено от: jterrace / xvfb )

Сохраните его как /etc/init.d/xvfb и сделайте его исполняемым, затем запустите его как:

/etc/init.d/xvfb start

Для автоматического запуска при запуске запустите:

sudo update-rc.d xvfb defaults

Чтобы удалить его из автозапуска, запустите:

sudo update-rc.d -f xvfb remove

Также добавьте в файл среды , который будет распознаваться программами X, например:

echo DISPLAY=":1" | sudo tee -a /etc/environment

Вот версия для версии systemd: dloman / xvfb .service .

1
18.05.2015, 13:53
1 ответ

Я бы использовал диалект регулярных выражений perl. Если вы работаете в системе с sed, то, скорее всего, у вас есть perl.

Дано

<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>

Perl Regex

perl -i -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

Примечания

Возможно, вы захотите проверить это, сначала напечатав в терминале.

perl -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

Или создайте резервную копию с расширением .bak

perl -i.bak -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

Объяснение регулярных выражений:

  • (): группировать как переменную \1
  • ": кавычки являются буквальными из-за выражения в одинарных кавычках, поэтому их не нужно экранировать.
  • ?: служит для усмирения *, то есть он перестанет жрать при первом совпадении (и не будет продолжать жрать до последнего ". sed не поддерживает не жадные операторы, но вы можете использовать трюк из другого ответа [^"]*", который означает "заглатывание" всех символов, которые не являются " до ". Это эффективно делает то же самое в данном случае.
1
27.01.2020, 23:50

Теги

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