我正在尝试将字符串与$字符进行比较,后跟s或t和一系列数字。但是每个字母的范围都不同。 例如,如果是 s ,则可以跟0-7之间的数字,如果是 t ,则可以跟0-9之间的数字。>
我设法编写了一部分if语句来进行比较,但是我不知道如何为每个字母包括不同的范围
脚本:
#!/bin/bash
input="test1.txt"
check(){
while read -r line; do
a=( $line )
for i in "${a[@]:1}"; do
if [[ "$i" == \$[st]* ]]; then
echo "$i"
fi
done
done < "$input"
}
check
我不想使用*,而是要指定 s ,它只能跟在0-7和 t 之间的数字,只能跟在0-9之间。 我尝试使用此:
if [[ "$i" == \$(s[0-7]*|t[0-9]*) ]]; then
但是我得到了这个错误:
./test.sh: line 9: syntax error in conditional expression: unexpected token `(' ./test.sh: line 9: syntax error near `\$(s' ./test.sh: line 9: `if [[ "$i" == \$(s[0-7]*|t[0-9]*) ]]; then'
答案 0 :(得分:6)
=~
用于正则表达式匹配,而非==
。对此进行更正,并在正则表达式中使用管道(|
),这表示 OR 。
if [[ $i =~ \$(s[0-7]*|t[0-9]*) ]]
答案 1 :(得分:1)
为什么要为此编写带有循环的脚本?如本例所示,只需使用grep
即可完成此操作:
Prompt>cat test1.txt
s1
s8
t1
t8
Prompt> grep -E "s[0-7]|t[0-9]" test1.txt
s1
t1
t8
说明:
s[0-7]
表示字母“ s”,后跟0到7之间的任何数字。
t[0-9]
表示字母“ t”,后跟0到9之间的任何数字。
grep -E
的意思是“扩展的正则表达式”。
A|B
在正则表达式中表示The expression should contain A OR B
(恰好是正则表达式的“扩展”部分)。