检查bash脚本中的字符串格式

时间:2014-10-03 20:20:36

标签: bash grep

我试图在bash脚本中检查字符串开头的格式是否正确。

预期的格式如下所示,字符串必须始终以“ABCDEFG-”(确切的字母和顺序)开头,数字会有所不同,但至少为3位数。第三位数后的所有内容都是无所谓。 预期的字符串开头:“ABCDEFG-1234”

我正在使用以下代码段。

[ $(echo "$str" | grep -E "ABCDEFG-[0-9][0-9][0-9]") ] && echo "yes"

str1 =“ABCDEFG-1234”

str2 =“ABCDEFG-1234 - 更多文字”

当我使用str1代替str时,一切正常,打印出来。

当我使用str2代替str时,我得到以下错误

[: ABCDEFG-1234: unary operator expected

我很擅长使用bash脚本,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

如果这是bash,你根本就没有理由使用grep; shell具有内置的正则表达式支持。

re="ABCDEFG-[0-9][0-9][0-9]"
[[ $str =~ $re ]] && echo "yes"

那就是说,如果你想在开头而不是在内容的任何地方进行匹配,你可能希望你的正则表达式被锚定:

re="^ABCDEFG-[0-9][0-9][0-9]"
[[ $str =~ $re ]] && echo "yes"

那就是说,这根本不需要是一个ERE - 一个全局式的模式匹配也足够了:

if [[ $str = ABCDEFG-[0-9][0-9][0-9]* ]]; then echo "yes"; fi

答案 1 :(得分:0)

尝试grep -E "ABCDEFG-[0-9][0-9][0-9].*"