Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用Shell脚本Linux检查正则表达式中的字符/(转义斜杠)和^_Regex_Linux_Shell_Scripting - Fatal编程技术网

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

Regex 如何使用Shell脚本Linux检查正则表达式中的字符/(转义斜杠)和^,regex,linux,shell,scripting,Regex,Linux,Shell,Scripting,我想使用linux shell脚本检查一行中是否有特定字符。到目前为止,使用regex(正则表达式)的代码可以识别一些字符,但是在检查char“^”和“/”时出现了问题(我只检查了这两个,可能还检查了“\” 这是密码 VALID='0-9a-zA-Z $%&@.#<>-' while read line do if [[ ! $line =~ [^$VALID] ]]; then echo "" else

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

这是密码

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 < $1
VALID='0-9a-zA-Z$%&
读行时
做
如果[!$line=~[^$VALID]]];则
回声“”
其他的
echo“文件不正常。包含无效字符”
出口1
fi
已完成<$1
如果通过读取文件来运行程序,则假定行包含

<CurrencyTarget>IDR</CurrencyTarget>
IDR
程序将运行,然后在到达“/”时停止。 但是如果您删除“/”(或“^”如果存在)并将其替换为(比如说)&”

IDR
程序将显示“文件不正常。包含无效字符”

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

注意:我知道导致错误的原因是,如果使用“^”,那么参数“^$VALID”将变成“^^^”;如果使用“/那么参数“^$VALID”将变成“^/”,但我不知道如何正确修复它


非常感谢任何帮助

这种情况就是问题所在:

if [[ ! $line =~ [^$VALID] ]]; then
                 ^^^^^^^^^
您可以将其用作:

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

[[ $line =~ $valid ]] && echo "matched" || echo "no match"
valid='^[0-9a-zA-Z$%&@.#-]+$'
行='abc-123'
[[$line=~$valid]]&&echo“匹配”| | echo“不匹配”

是否检查特殊字符(如å或å)或中所示的任何特殊字符?因为您的代码不适用于特殊字符。请尝试我更新的示例作为答案。
å或å
将不匹配
^[0-9a-zA-Z$%&@.#-]+$
因此您将得到
不匹配的结果
谢谢。它很有效。但我想知道为什么更改数字的位置会使输出变得不同>?实际上regex变量
$valid
应该在
=
操作符之后取消引号。因此
[$line=~$valid]
将起作用,但
[[$line=~“$valid”]]
不会起作用。
valid='^[0-9a-zA-Z $%&@.#<>-]+$'
line='abc-123'

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