Regex if语句中带有正则表达式的Shell脚本出错
我不熟悉shell脚本,我正在尝试用if语句编写正则表达式。我在MacOSX10.6.8上使用BashShell。下面是我试图运行的代码Regex if语句中带有正则表达式的Shell脚本出错,regex,macos,bash,Regex,Macos,Bash,我不熟悉shell脚本,我正在尝试用if语句编写正则表达式。我在MacOSX10.6.8上使用BashShell。下面是我试图运行的代码 #!/bin/bash line="A903 ATGCGTCGTC" if [[ $line =~ ^\w+\t[GATCN]+ ]]; then echo "Exiting ... Check File" exit 0 else echo "File ... OK" fi 我应该得到“退出…检查
#!/bin/bash
line="A903 ATGCGTCGTC"
if [[ $line =~ ^\w+\t[GATCN]+ ]]; then
echo "Exiting ... Check File"
exit 0
else
echo "File ... OK"
fi
我应该得到“退出…检查文件”作为输出,而不是“文件…确定”。我做错了什么?谢谢你的帮助。这个适合我
#!/bin/bash
line="A903 ATGCGTCGTC"
if [[ $line =~ ^[[:alnum:]]+[[:space:]]+[GATCN]+ ]]; then
echo "Exiting ... Check File"
exit 0
else
echo "File ... OK"
fi
找到有关POSIX正则表达式的信息我不确定
\w
和\t
在bash正则表达式中是否有效。如果我用[A-Z0-9]+
和一个文本选项卡替换它们,它就可以工作了。好的。。。你能给我指一本教科书或一个网站,在那里我可以找到有效的bash正则表达式吗?谢谢我通过搜索一些堆栈溢出帖子和其他有好资源的帖子来编写这段代码。我个人喜欢Bash黑客和Lhunah的BashGuide。显然,POSIX正则表达式字符允许更好的可移植性,因为它们符合您的语言环境。恼人的是,它们太长了,但是你可以将正则表达式存储在它自己的变量中,放在不同的行上,以减少行的长度。是的,它适合我。谢谢但是,天哪,这太复杂了。我不能绕开POSIX正则表达式吗?或者这是mac电脑上的终端设备。Thnaks+1,但值得注意的是,[[:space:]
相当于\s
,因此匹配的不仅仅是\t
——如果您只想匹配后者,可以在bash选项卡文本中拼接($'\t'
):如果[$line=~^[:alnum:]+$'\t'[GATCN]+];然后