sed - 为什么 sed 不尊重简单的正则表达式?
问题描述
- 我的文字:
mmhmmh here_is_you 05451ab8 888
- 我的正则表达式:
mmhmmh \w* ([ab0-9]*) \d*
- 我的 sed 命令:
echo "mmhmmh here_is_you 05451ab8 888" | sed -n 's/mmhmmh \w* \([ab0-9]*\) \d*/\1/p'
- 结果:
05451ab8888
而不是05451ab8
为什么 sed 不尊重我的正则表达式?我检查了一下,我的正则表达式应该正确地选择了预期的结果。
解决方案
正如赛勒斯在评论链接中指出的那样,\d
确实会出现问题,请使用[0-9]
echo "mmhmmh here_is_you 05451ab8 888" | sed -n 's/mmhmmh [a-zA-Z0-9_]* \([ab0-9]*\) [0-9]*/\1/p'
05451ab8
或者[[:digit:]]
echo "mmhmmh here_is_you 05451ab8 888" | sed -n 's/mmhmmh [[:alnum:]_]* \([ab0-9]*\) [[:digit:]]*/\1/p'
05451ab8
正如 trpleee 指出的那样,不要使用\w
任何一种。
推荐阅读
- python - 在python中计算优势比
- css - CSS Display 属性防止元素隐藏
- javascript - JavaScript 状态和语句
- algorithm - 从 1 -> n 的最小步数,两次操作
- python - Rasbian Lite:电子邮件 Python 包安装(没有名为“cStringIO”的模块)
- cpu - CPU寄存器的内容多久改变一次?
- python - 如何在使用 Keras 的机器学习中使用单一课程教授模型?
- javascript - 在程序中练习求三棱柱体积的函数。尝试调试我的代码,但无法弄清楚为什么它不起作用
- mysql - 如何在没有主键的情况下引用表中的记录
- java - Builder Pattern Java:如何在 BaseBuilder 中为 Generic BaseClass 引用泛型类型