行尾字符($)在方括号中不起作用(') [英] End of line char ($) doesn't work inside square brackets

查看:16
本文介绍了行尾字符($)在方括号中不起作用(')的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

$放在方括号中不适用于grep。

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

这是grep中的错误还是我做错了什么?

推荐答案

这就是它应该执行的操作。

[$]

...定义与一个字符$匹配的字符类。

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


有关要求这样做的正式规范,请参阅POSIXRE括号表达式定义。引用该完整定义:

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

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


此外,中的BRE锚定表达式定义:

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

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

这篇关于行尾字符($)在方括号中不起作用(')的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆