x20-x7E 正则表达式十六进制范围的 grep 在 Windows10 MINGW64 bash 中不起作用
grep for x20-x7E regex hex range not working in Windows10 MINGW64 bash
我的档案test.csv
Col1,Col2,Col3,Col4
1,AAA,1,
2,BBB,0,
3,CCCÆ,,ttt
4,DDD,1,
5,EEE,0,
预期输出:
3,CCCÆ,,ttt
尝试过:
grep -a "[^\x20-\x7e]+" test.csv
grep -a '[^\x20-\x7e]+' test.csv
grep "[^\x20-\x7e]+" test.csv
grep '[^\x20-\x7e]+' test.csv
也尝试了标志 -P 和 -E 但都没有 return 我想要的结果。
在 Powershell 中,我做到了
Select-String -Pattern '[^\x20-\x7E]+' test.csv
它 return 给我预期的结果。
有人可以在 Windows10 上为 MINGW64 bash grep (GNU grep) 3.1
指出正确的方向吗?
它是通过 git 下载 windows 安装的:https://git-scm.com/download/win
如果你可以直接使用 perl,这样就可以了:
perl -ne 'print if (/[^\x00-\x7F]/)' test.csv
Windows 的 grep 中的 POSIX BRE 和 ERE 语法似乎不支持 \xXX
符号。
您可以使用 -P
选项启用 PCRE 正则表达式引擎,然后使用
grep -P "[^\x{00}-\x{7E}]" file
或者,
grep -P "[^[:ascii:]]" file
查找任何包含非 ASCII 字符的行。
注意 您不能使用 [^\x20-\x7E]
范围,因为 CR(以 Windows 文本文件结尾的行的一部分)将被匹配,并且所有行,但最后一行(如果后面没有尾随换行符)将被匹配。您可以将 CR 符号添加到取反字符 class 并使用 grep -P "[^\x{0D}\x{20}-\x{7E}]" file
。
我的档案test.csv
Col1,Col2,Col3,Col4
1,AAA,1,
2,BBB,0,
3,CCCÆ,,ttt
4,DDD,1,
5,EEE,0,
预期输出:
3,CCCÆ,,ttt
尝试过:
grep -a "[^\x20-\x7e]+" test.csv
grep -a '[^\x20-\x7e]+' test.csv
grep "[^\x20-\x7e]+" test.csv
grep '[^\x20-\x7e]+' test.csv
也尝试了标志 -P 和 -E 但都没有 return 我想要的结果。 在 Powershell 中,我做到了
Select-String -Pattern '[^\x20-\x7E]+' test.csv
它 return 给我预期的结果。
有人可以在 Windows10 上为 MINGW64 bash grep (GNU grep) 3.1
指出正确的方向吗?
它是通过 git 下载 windows 安装的:https://git-scm.com/download/win
如果你可以直接使用 perl,这样就可以了:
perl -ne 'print if (/[^\x00-\x7F]/)' test.csv
Windows 的 grep 中的 POSIX BRE 和 ERE 语法似乎不支持 \xXX
符号。
您可以使用 -P
选项启用 PCRE 正则表达式引擎,然后使用
grep -P "[^\x{00}-\x{7E}]" file
或者,
grep -P "[^[:ascii:]]" file
查找任何包含非 ASCII 字符的行。
注意 您不能使用 [^\x20-\x7E]
范围,因为 CR(以 Windows 文本文件结尾的行的一部分)将被匹配,并且所有行,但最后一行(如果后面没有尾随换行符)将被匹配。您可以将 CR 符号添加到取反字符 class 并使用 grep -P "[^\x{0D}\x{20}-\x{7E}]" file
。