根据模式检查bash脚本参数,并替换其中的字符

时间:2016-07-25 16:05:33

标签: regex bash shell posix glob

我需要编写一个bash脚本来检查提供给脚本的第一个参数是否与glob模式匹配,在JavaScript RegExp中我将表示为

^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$

换句话说:以一个或多个字母/数字开头,后跟一个句号,后跟2个或更多个字母,然后结束。其他一切都不应该通过测试。

然后我还需要用下划线替换参数中的句点。

到目前为止,我可以检查参数是否为空:

case $1 in
  '') echo "No argument supplied" >&2; exit 1 ;;
esac

我认为模式测试需要被否定并放在{case}语句中的''检查之后,但我不知道如何构造它。任何直接的帮助或在线资源将不胜感激。

我还希望有任何可能的帮助,然后我可以更改提供的有效参数,用下划线替换其中的单个句点。

1 个答案:

答案 0 :(得分:3)

同样的正则表达式也适用于BASH。请考虑以下代码段:

re='^[a-zA-Z0-9]+\.[a-zA-Z]{2,}$'
s='abc123.xy'

[[ $s =~ $re ]] && echo "${s/./_}"
abc123_xy