如何检查正则表达式中的字符 /(转义斜杠)和 ^ 使用 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"
我想使用 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"