Меньше
имеет очень мощное сопоставление образец. От страницы Page :
& Pattern
отображает только линии, которые соответствуют шаблону
; Линии, которые не соответствуют шаблону
, не отображаются. Если
шаблон
пустой (Если вы напечатаете&
, а затем следуют ввод ), Любая фильтрация выключается, и все линии отображаются. Хотя фильтрация существует, Амперсанд отображается в начале подсказки, В качестве напоминания о том, что некоторые строки в файле могут быть скрыты.Некоторые символы особенные как в команде
/
† :
^ N
или!
Отображение только линий, которые не соответствуют шаблону
.
^ R
не интерпретировать регулярные механизмы выражения; То есть сделать простое текстовое сравнение.
____________
† Некоторые символы специальные Если вносятся в начале модели; Они изменит тип поиска вместо того, чтобы стать частью шаблона
.
(конечно ^ n
и ^ R
Ctrl Ctrl + N
и Ctrl + R , соответственно.)
Так, например, & DNS
будут отображаться только строки, которые соответствуют шаблону DNS
,
и &! DNS
будет отфильтровать (исключать) эти линии,
Отображение только линий, которые не соответствуют шаблону.
Отмечено в описании команды /
, что
шаблон
является регулярным выражением, Как признано обычной библиотекой экспрессии, предоставленной вашей системой.
Итак
& ETH [01]
будут отображаться линии, содержащие ETH0
или ETH1
& ARP. * ETH0
будут отображаться линии, содержащие ARP
с последующим ETH0
& ARP | DNS
будут отображать линии, содержащие ARP
или DNS
и !
может инвертировать любой из вышеперечисленных.
Таким образом, команда, которую вы хотели бы использовать для примера в вашем вопросе:
&!event text|something else|the other thing|foo|bar
также используют / Pattern
и ? Pattern
для поиска (и N
/ N
, чтобы перейти к следующему / предыдущему).
-121--7052-
Такое поведение зависит от опции «Выбор»
. Кажется, у вас есть (не по умолчанию)
; С включительно
, выбор включает в себя символ под курсором. Так что переключение того, что вариант будет одним решением.
Если вы хотите сохранить его, вы можете сделать ваш задом наперед, а затем использовать O $
или ol
, чтобы вернуться к справа и расширить его пропуском символа.
Или : установить Virtualedit = OneMore
. Это позволит вам выходить за пределы последнего символа в линии и начать выбирать оттуда: LV ...
Кроме того, доступные «внутренние» объекты текстовых объектов, часто получают потребность в явном выборе. Например, VIW
выберет все последнее слово.
Я предполагаю, что вы хотите:
one specific secondary VPN server to become the default gateway for a given client.
Если это так, что можно сделать с помощью маршрута Push. Вы уже знаете, что вы можете сказать клиенту адрес своего «нового» шлюза после того, как соединение OpenVPN выросло.
Ну, вы можете сделать это динамически .
- Сценарий Client-Connect Запустите скрипт на клиентском соединении. Сценарий пропускается Общее имя и IP-адрес только что аутентифицированного клиента в качестве экологической Переменные (см. Экологическую переменную секцию ниже). Сценарий Также прошло путь к еще не созданному временному файлу как 1 доллар (то есть. Первый аргумент командной строки), для использования сценарием Пройдите динамически сгенерированные директивы файлов конфигурации обратно в OpenVPN .
Если сценарий хочет создать файл динамического конфигурации, который будет применен на сервере, когда клиент подключается, он должен написать его Файл с именем 1 $.
См. Вариант «PRIGN-CONFIG-DIR» ниже для параметров, которые могут быть законно использоваться в динамически сгенерированном файле конфигурации.
Обратите внимание, что Возвращаемое значение сценария значительно . Если сценарий возвращает ненулевое состояние ошибки, он приведет к отключению клиента.
Итак, все, что вам нужно сделать, это поддерживать список записей (Client-Commass name, default-Gateway) и подготовить Client-Connect
скрипт , который проверит имя клиента и подготовит Соответствующие Push «Manager-Gateway ABCD»
, которые будут отправлены на сервер OpenVPN и оттуда к клиенту.
Вы также можете поставить IP
команд в скрипте, но, возможно, вам не нужны.
Например:
#!/bin/sh
# Connect script for OpenVPN. This is /usr/local/bin/openvpn-connect-script.sh
# and OpenVPN server requires the extra option
#
# --connect-client /usr/local/bin/openvpn-connect-script.sh
#
$script="$1"
# We could even fetch this from, say, a MySQL database.
# GATEWAY=$( echo "SELECT gateway FROM users_config WHERE user='$username';" \
# | mysql -N openvpn )
case "$username" in
"lserni")
GATEWAY=192.168.168.192
;;
"apiraino")
GATEWAY=192.168.170.133
;;
"*")
GATEWAY=192.168.172.1
;;
esac
cat <<-CONFIG > $script
# Extra options, user-dependant.
gateway $GATEWAY
CONFIG
exit 0