less 模式 - 以 [ ] 或 $ 結尾

less 模式 - 以 [ ] 或 $ 結尾

參考我可以取得 bash 內建指令的單獨手冊頁嗎:

bashman () { man bash | less -p "^       $1 "; }

此函數將直接跳到所需的 bash 手動參數部分。

我想讓它動態接受任何手動名稱和手動參數,所以我將此函數更改為:

function superman () {
    man "$1" | less -p "^[ ]+[-]*$2[ ]"
}

它完美地適用於:

$ 超人 bash 類型

並跳到所需的手冊頁部分:

在此輸入影像描述

但它不適用於以換行符號結尾的部分。我需要將其更改為:

function superman () {
    man "$1" | less -p "^[ ]+[-]*$2$"
}

然後運行$ superman gcc Wall就能跳到Wall參數:

在此輸入影像描述

如何結合[ ]$成為[ ] OR $? IE以「至少一個空格」或「換行」結尾

我嘗試過$ man gcc | less -p "^[ ]+[-]*Wall[ |$]",但不起作用。

請注意,我接受這種不必要的跳轉,它以結尾[ ]但不是真正的開頭,因為我相信如果正則表達式是[ ]OR ,它是無法解決的$

在此輸入影像描述

[感謝您的回答]

我想在這裡分享我的最終形式:

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,optiongcc要求,scaletempo來自mplayerrequire[scale來自mplayerrequire=

info也寫了版本:

function superinfo () {
    if [[ "$1" == "-I" || "$1" == "-i" ]]; then
        info "$2" | less -I -p "^ *‘*'*-*\** *$3’*( |=|,|$|\[|:|')"
    else
        info "$1" | less -p "^ *‘*'*-*\** *$2’*( |=|,|$|\[|:|')"
    fi
}

使用superinfo gcc _HPPAsuperinfo -i gcc werrorsuperinfo -i gcc wlsuperinfo -i mplayer scaletemposuperinfo -i mplayer statssuperinfo -i ls -f和進行測試superinfo -i bash -a(這裡使用減號有很大差異)。of使用的Unicode 左單引號。-fls

答案1

我相信您誤解了正規表示式[中方括號的意思。]注意你的模式:

^[ ]+[-]*Wall[ |$]

[ ]與(單一空格)完全相同且[-]與 完全相同-。並且在該模式的最後部分,[foo|bar]並不表示“要么foobar”。

您要找的是( |$).這是匹配一件事或另一件事的語法。 (由於美元符號的原因,您還需要用單引號或反斜線而不是雙引號來引用模式的該部分)。

[thing]表示一個字元類別:它匹配thing

答案2

[ ]和怎樣組合$

([ ]|$)或者( |$)

相關內容