正则表达式:多个lookbehinds

时间:2015-02-16 11:59:16

标签: regex terminal grep lookbehind

我在这个正则表达式上挣扎了好几天。我有这样的文字:

alias -g NULL="> /dev/null 2>&1"    # redirect output
test                                # don't match
alias l="ls -lahGF"                 # list all
PROMPT=$'$FG[237]'                  # don't match

我希望使用NULL或其他终端命令匹配lgrep。是否可以在不使用组的情况下直接匹配它们?

我尝试使用(?<=^alias )(?<=-g).+但没有结果。

4 个答案:

答案 0 :(得分:3)

您可以使用以下grep命令,该命令使用PCRE正则表达式。

grep -oP '^alias(?:\s+-g)?\s+\K[^=]+(?==)' file

OR

grep -oP '^alias(?:\s+-g)?\s+\K\w+' file

OR

$ grep -oP '^alias(?:\s+-g)?\s+\K[^=]+' file
NULL
l

\K会丢弃先前在匹配时打印的匹配字符。 \K使文本与整个正则表达式匹配保持匹配。

答案 1 :(得分:3)

这可能看起来有点粗糙,但它非常易读,如如果是别名声明,请抓取别名文字

grep ^alias test | grep -oP "\w+(?==)"

答案 2 :(得分:2)

您可以使用此awk

awk '$1=="alias"{p=$0; sub(/=.*$/, ""); split($0, a, " "); sub(/^.*# /, "", p); 
     print a[length(a)] ":", p}' file
NULL: redirect output
l: list all

答案 3 :(得分:1)

$ awk 'sub(/^alias[^=]* /,"") && sub(/=.*/,"")' file
NULL
l
相关问题