grep utf8/unicode support/ u 修饰符 [duplicate]

grep utf8/unicode support/ u modifier [duplicate]

提问人:user3783243 提问时间:3/5/2022 更新时间:3/5/2022 访问量:159

问:

我正在尝试验证特定格式的 vtt 文件。正则表达式正常工作,但 UTF8 字符导致问题。我尝试使用但没有运气(?u)

我使用的正则表达式是:

grep -P '(?m)^(\d+:\d+[.]\d+\s*-->\s*\d+:\d+[.]\d+|\s*[\w\s]+)|^\s*$' . -r -v

https://regex101.com/r/21HW2A/1,该标志允许正则表达式在此处按预期工作,但我在 .我是否需要将 换成所有允许的字母数字字符,或者可以以某种方式使用修饰符吗?ugrep\wugrep

正则表达式 unicode utf-8 grep

评论

0赞 Tomalak 3/5/2022
我不认为 grep 根本不支持 Unicode。您可能应该切换到可识别 Unicode 的工具。也许 Python 可能是一种选择?
0赞 user3783243 3/5/2022
我找到了一个解决方案,用 代替 .不确定是否还有 unicode 标志。\p{L}\w
0赞 Tomalak 3/5/2022
这将是运行在 Unicode 感知工具之上的正则表达式中的规范解决方案。它适用于您的 grep 版本吗?
0赞 user3783243 3/5/2022
是的,我运行的是 AWS Linux 2.0。GNU grep 2.20
0赞 Tomalak 3/5/2022
那么你有你的解决方案,我学到了一些东西。:)

答:

0赞 user3783243 3/5/2022 #1

可以转换为不需要修饰符来支持 unicode。\w\p{L}u

完整解决方案:

grep -P '(?m)^(\d+:\d+[.]\d+\s*-->\s*\d+:\d+[.]\d+|\s*[\p{L}\s]+)|^\s*$' . -r -v