regex - 将正则表达式从 bash 转换为 zsh
问题描述
我最近将 macOS 更新为新的 Catalina 版本,并按照建议从 bash 切换到 zsh。问题是在我的工作流程中,我们做了一些需要正则表达式的文件操作,但我不知道如何使它与 zsh 一起工作。
这是我的两个正则表达式:
ls | grep ^[0-9].*.chunk.js$
ls | grep ^main.*.chunk.js$
它们应与以下文件匹配:main.d9a85e98.chunk.js
和2.c2cbac0f.chunk.js
有什么想法或资源吗?
谢谢!
解决方案
grep
引用正则表达式以防止在看到字符串之前尝试对其进行外壳扩展。
# Ignoring the issue of parsing the output of ls
ls | grep '^[0-9].*.chunk.js$'
ls | grep '^main.*.chunk.js$'
正则表达式通常可以解释为 shell 模式,bash
在zsh
运行命令之前都会尝试扩展。两种 shell 都可以选择将不匹配的模式视为错误或文字字符串。默认情况下,bash
将其视为文字字符串,而zsh
将其视为错误。在任一 shell 中要做的“正确”事情是引用一个您绝对不打算将其扩展为模式的字符串。bash
只是让你更频繁地摆脱它。
在bash
中,这是由failglob
选项控制的,默认情况下是关闭的。
在zsh
中,它由NOMATCH
选项控制,默认为开启。
zsh
还具有更丰富的模式语言,因此可能不会导致模式匹配的字符串可以bash
在zsh
. 结果是一样的:grep
看不到你想要的论点。
推荐阅读
- amazon-web-services - 如何在没有域管理员帐户的情况下在 AWS Directory Service 上设置 AD FS?
- ios - 在 Swift 5 中检查 iOS 版本时的预期声明
- ruby - 我需要使用 hasrsine 函数返回两点之间的距离
- reactjs - 在功能组件中将回调作为道具传递时的反应性能问题
- javascript - 如何显示html页面(html代码存储在变量中)
- android-glide - 在 Android Studio 4.1 中找不到 GlideApp 符号
- django - 在 model.py 中运行函数 - Django
- ruby-on-rails - UTC 中的时区比较在预期为 false 时返回 true
- swift - 旋转按钮导致改变它的框架
- tableau-api - 如何划分聚合和求和函数