我总是发现自己在UNIX中对这两个通配符的使用感到困惑。 我知道星号只能用作正则表达式中的量词,但在某些情况下,UNIX允许*
命令,如ls
命令,而在grep
中,它只能用作量词。有没有一些规定可以指导我使用哪一种?unix正则表达式中的星号(*)和星号(。*)
4
A
回答
8
你在谈论UNIX中两种不同的模式:glob(通配符)和正则表达式。
Globs通常用于匹配文件名。你的shell自动执行的命令参数通配符扩展,这是你如何编写
ls *foo*
列出包含字符串foo
所有文件。 Globs非常简单(忽略extglob
):语法通常仅支持*
(任何字符)和?
(任意一个字符)。由于shell的自动扩展,这些可以在任何地方使用,并且必须明确禁止以避免不必要的匹配(例如,编写grep '.*foo.*'
以避免在模式中扩展*
)。
另一方面,我们有正则表达式,用于模式匹配文本。通常,这些与特定的实用程序(如grep
,sed
和perl
)一起使用,它们理解这些模式,尽管一些shell具有采用正则表达式的上下文(例如Bash的${x/pat/sub}
)。正则表达式的语法更加强大,这使得它非常适合查看特定模式的文本。
+0
清楚地表明它!感谢您花时间去解决这个详细的答案。 – toddlermenot 2013-03-10 13:03:31
相关问题
- 1. 正则表达式星号
- 2. 正则表达式中的星号
- 3. 正则表达式问题 - 星号\ d
- 4. 正则表达式(VIM)星号代替
- 5. 正则表达式嵌套星号
- 6. 正则表达式方括号中有星号的
- 7. 桑达正则表达式^ *(尖点星号)不匹配正确
- 8. 正则表达式允许数字和星号
- 9. 正则表达式否定字符类和点星号
- 10. 如何在python的lookbehind正则表达式中使用星号?
- 11. 正则表达式重复星号的模式匹配
- 12. OS X在正则表达式中使用文字星号
- 13. 正则表达式在lookaheads中使用点星号;
- 14. 如何在正则表达式中转义星号?
- 15. Python的正则表达式匹配的文字星号
- 16. Ruby的正则表达式的星号/下划线强/ em?
- 17. PHP的正则表达式替换每个字符的星号
- 18. 正则表达式的单词后面跟着星号
- 19. 带星号的正则表达式(带一个具体示例)
- 20. 使用星号字符搜索文本的正则表达式
- 21. Java正则表达式分割与任何数量的星号
- 22. Java - 正则表达式 - 匹配字符串以星号或分号开头并带星号
- 23. 正则表达式3个字母数字或1个星号
- 24. C#正则表达式文字,包括星号
- 25. 正则表达式迭代元字符*(星号)不起作用
- 26. GREP - 正则表达式+(加)与*(星号)性能
- 27. 正则表达式提取星号队列统计
- 28. 正则表达式匹配一个字符串与星号
- 29. 为什么这个正则表达式允许星号通过?
- 30. 双星号正则表达式报告为无效
你在'regex'和'glob'之间感到困惑。 – 2013-03-10 12:46:18