我试图在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脚本,所以任何帮助都会受到赞赏。
答案 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].*"