如何检查正则表达式中的字符 /(转义斜杠)和 ^ 使用 Shell 脚本 Linux

How to check Regex for character / (escape slash) and ^ Using Shell Scripting Linux

我想使用 linux 的 shell 脚本检查一行中是否有特定字符。到目前为止,使用regex(正则表达式)的代码可以识别一些字符,但是在检查字符'^'和'/'时出现问题(我只检查这两个,也许还有'\'。

这是代码

VALID='0-9a-zA-Z $%&@.#<>-'
while read line
do  
        if [[ ! $line =~ [^$VALID] ]]; then
        echo ""         
    else                    
        echo "File not okay. Contain Invalid Character"
        exit 1                      
    fi
done < 

如果运行程序通过读取文件,假设该行包含

<CurrencyTarget>IDR</CurrencyTarget>

程序将运行然后在到达'/'时停止。 但是如果你删除'/'(或'^'如果存在)并将其替换为(比方说)'&'

<CurrencyTarget>IDR<&CurrencyTarget>

程序会显示"File not okay. Contain Invalid Character".

如何修复 / 和 ^ 字符的行为? 我已经尝试使用 /\ 或 //\ (谷歌搜索,我得到了这个)但仍然出错。

nb:我知道错误是因为如果使用 ^ 则参数 ^$VALID 将变为 ^^ 如果使用 / 则参数 ^$VALID 将变为 ^/ ,但我不知道如何正确修复它。

非常感谢任何帮助

这个条件就是问题所在:

if [[ ! $line =~ [^$VALID] ]]; then
                 ^^^^^^^^^

您可以将其用作:

valid='^[0-9a-zA-Z $%&@.#<>-]+$'
line='abc-123'

[[ $line =~ $valid ]] && echo "matched" || echo "no match"