用于检查二进制传输的 ASCII 的正则表达式 space In Bash

Regex for checking binary transferred ASCII space In Bash

我正在以二进制模式将一个 csv 文件从 windows 复制到 linux。 在 bash 中,我想验证内容,使用特定字符集,如字母数字和一些特殊字符。

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

关于发送线路...

ABCD EFG, ABCD EFG, ABCD EFG

regx 无法识别 space。因为它是从 windows 以二进制模式复制的。 我给他们 linux space 的那一刻。 regx 将其识别为 space.

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

要在输入的末尾允许可选的 \r(DOS 行结束),您可以使用此正则表达式:

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

现在测试一下:

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

输出:

valid