Regex 行尾字符($)不';不要在方括号内工作

Regex 行尾字符($)不';不要在方括号内工作,regex,grep,Regex,Grep,将$放在方括号内不适用于grep ~ $ echo -e "hello\nthere" > example.txt ~ $ grep "hello$" example.txt hello ~ $ grep "hello[$]" example.txt ~ $ 这是grep中的一个bug还是我做错了什么?这就是它应该做的 [$] …定义与一个字符相匹配的字符类,$ 因此,这将匹配包含hello$的行 有关要求这样做的正式规范,请参见。引用该完整定义: 方括号表达式(括在方括号内的

$
放在方括号内不适用于grep

~ $ echo -e "hello\nthere" > example.txt
~ $ grep "hello$" example.txt 
hello
~ $ grep "hello[$]" example.txt 
~ $ 

这是grep中的一个bug还是我做错了什么?

这就是它应该做的

[$]
…定义与一个字符相匹配的字符类,
$

因此,这将匹配包含
hello$
的行


有关要求这样做的正式规范,请参见。引用该完整定义:

方括号表达式(括在方括号内的表达式,“[]”)是一个RE,它应与方括号表达式表示的非空排序元素集中包含的单个排序元素相匹配

因此,任何括号表达式都与单个元素匹配


而且,

  • 当用作整个BRE的最后一个字符时,美元符号(“$”)应为锚点。当用作子表达式的最后一个字符时,该实现可以将美元符号视为锚点。美元符号应将表达式(或可选子表达式)锚定到匹配字符串的末尾;可以说美元符号与最后一个字符后面的字符串结尾相匹配

  • 因此——从BRE开始,
    grep
    默认识别的regexp格式不带参数——如果
    $
    不在表达式的末尾,则不需要将其识别为锚点。

    但是,您可以在括号分组中使用
    $
    ,这有助于使用
    (或),它可以实现与方括号组相同的想法

    您可能对以下内容感兴趣:

    ~ $ cat example.txt 
    hello
    there
    helloa
    hellob
    helloc
    
    ~ $ grep "hello\($\|[ab]\)" example.txt
    hello
    helloa
    hellob
    

    如果试图匹配行尾字符或字符串的结尾,可以使用类似“ABC($|\n)”的(|)命令。

    有问题
    [$]
    是字符
    $
    的字符类。这就是
    []
    的用途。