![меньше шаблон - заканчивается на [ ] или $](https://rvso.com/image/97017/%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%20%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%20-%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%BD%D1%87%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%D1%81%D1%8F%20%D0%BD%D0%B0%20%5B%20%5D%20%D0%B8%D0%BB%D0%B8%20%24.png)
Ссылаться намогу-ли-я-получить-отдельные-man-страницы-для-встроенных-команд-bash:
bashman () { man bash | less -p "^ $1 "; }
Эта функция перейдет напрямую к нужному разделу параметров руководства bash.
Я хочу, чтобы он принимал любые ручные имена и ручные параметры «на лету», поэтому я изменяю эту функцию на:
function superman () {
man "$1" | less -p "^[ ]+[-]*$2[ ]"
}
Идеально работает с:
$ супермен тип bash
И перейдите к нужному разделу страницы руководства:
Но это не работает в разделе, заканчивающемся новой строкой. Мне нужно изменить это на:
function superman () {
man "$1" | less -p "^[ ]+[-]*$2$"
}
Затем run $ superman gcc Wall
сможет перейти к Wall
параметру:
Как совмещать [ ]
и $
быть [ ] OR $
? т.е.заканчивается "по крайней мере одним пробелом" ИЛИ "новой строкой".
Я пробовал $ man gcc | less -p "^[ ]+[-]*Wall[ |$]"
, но не работает.
Обратите внимание, что я принимаю этот нежелательный переход, который заканчивается [ ]
, но на самом деле не является началом раздела, поскольку я считаю, что это неразрешимо, если регулярное выражение — [ ]
ИЛИ $
:
[Спасибо за ответы]
Я хочу поделиться здесь своей окончательной формой:
function superman () {
if [[ "$1" == "-I" || "$1" == "-i" ]]; then
man "$2" | less -I -p "^[ ]+-*$3( |=|,|$|\[)"
else
man "$1" | less -p "^[ ]+-*$2( |=|,|$|\[)"
fi
}
Это сработает, если я запущу, superman -i gcc wl
что означает без учета регистра, чтобы перейти в -Wl,option
раздел. -Wl,option
из gcc
require ,
. scaletempo
из mplayer
require [
, и scale
из mplayer
require=
Я тоже написал для info
версии:
function superinfo () {
if [[ "$1" == "-I" || "$1" == "-i" ]]; then
info "$2" | less -I -p "^ *‘*'*-*\** *$3’*( |=|,|$|\[|:|')"
else
info "$1" | less -p "^ *‘*'*-*\** *$2’*( |=|,|$|\[|:|')"
fi
}
Протестировано с superinfo gcc _HPPA
, superinfo -i gcc werror
, superinfo -i gcc wl
, superinfo -i mplayer scaletempo
, superinfo -i mplayer stats
, superinfo -i ls -f
, и superinfo -i bash -a
(со знаком минус здесь имеет большое значение). ЛЕВАЯ ОДИНАРНАЯ КАВЫЧКА Unicode ’
используется -f
в ls
.
решение1
Я думаю, что вы ошибаетесь относительно значения [
квадратных скобок ]
в регулярном выражении. Обратите внимание на ваш шаблон:
^[ ]+[-]*Wall[ |$]
[ ]
это то же самое, что (один пробел) и
[-]
это то же самое, что и -
. И в последней части шаблона [foo|bar]
не означает «либо, foo
либо bar
».
То, что вы ищете, это ( |$)
. Это синтаксис для сопоставления одной вещи ИЛИ другой вещи. (Вам также нужно будет заключить эту часть шаблона в одинарные кавычки или обратную косую черту вместо двойных кавычек из-за знака доллара).
[thing]
обозначает класс символов: он соответствует либо t
, h
, i
, n
, либо g
.
решение2
Как объединить
[ ]
и$
?
([ ]|$)
или( |$)