正则expression式用于检查二进制传输的ASCII空间在Bash中

我在二进制模式下从Windows复制一个CSV文件到Linux。 在bash中,我想validation内容,使用像字母数字和特殊字符的特定字符集。

re='^[-a-zA-Z0-9. ,\/()&_]*$' if [[ ! $line =~ $re ]] then echo "Found undefined character in :$line" break fi 

发送一行…

 ABCD EFG, ABCD EFG, ABCD EFG 

regx不承认空间。 因为它是在二进制模式下从窗口复制的。 当我给他们的Linux空间。 雷克斯认为它是一个空间。

如何处理这个? 我无法将传输模式更改为ascii。

为了在输入结束时允许可选的\r (DOS行结束),可以使用这个正则表达式:

 re=$'^[-a-zA-Z0-9. ,/()&_]+\r?$' 

现在测试一下:

 line=$'ABCD EFG, ABCD EFG, ABCD EFG\r' [[ $line =~ $re ]] && echo "valid" || echo "invalid" 

输出:

 valid