首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不适用于Windows10 MINGW64 bash的x20-x7E正则十六进制范围的grep

不适用于Windows10 MINGW64 bash的x20-x7E正则十六进制范围的grep
EN

Stack Overflow用户
提问于 2020-04-26 11:14:30
回答 2查看 372关注 0票数 1

我的文件test.csv

代码语言:javascript
运行
复制
Col1,Col2,Col3,Col4
1,AAA,1,
2,BBB,0,
3,CCCÆ,,ttt
4,DDD,1,
5,EEE,0,

预期产出:

代码语言:javascript
运行
复制
3,CCCÆ,,ttt

试过:

代码语言:javascript
运行
复制
grep -a "[^\x20-\x7e]+" test.csv
grep -a '[^\x20-\x7e]+' test.csv
grep "[^\x20-\x7e]+" test.csv
grep '[^\x20-\x7e]+' test.csv

也尝试了标志-P和-E,但都没有返回我想要的结果。在Powershell中,我做了

代码语言:javascript
运行
复制
Select-String -Pattern '[^\x20-\x7E]+' test.csv

它还给了我预期的结果。

有人能指点我去MINGW64 bash grep (GNU grep) 3.1 on Windows10的正确方向吗?它是通过git下载windows来安装的:https://git-scm.com/download/win

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-26 12:59:38

grep中的POSIX和ERE语法似乎不支持\xXX表示法。

您可以使用-P选项启用PCRE引擎,然后使用

代码语言:javascript
运行
复制
grep -P "[^\x{00}-\x{7E}]" file

或,

代码语言:javascript
运行
复制
grep -P "[^[:ascii:]]" file

若要查找任何包含非ASCII字符的行,请执行以下操作。

注意到,您不能使用[^\x20-\x7E]范围,因为CR (以[^\x20-\x7E]文本文件结尾的部分)将得到匹配,除最后一行之外的所有行(如果后面没有尾随换行)将得到匹配。不过,您可以将CR符号添加到否定字符类中,并使用grep -P "[^\x{0D}\x{20}-\x{7E}]" file

票数 2
EN

Stack Overflow用户

发布于 2020-04-26 11:35:30

如果您可以直接使用perl,则可以这样做:

代码语言:javascript
运行
复制
perl -ne  'print if (/[^\x00-\x7F]/)' test.csv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61439739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档