带有:
string="H08W2345678"
匹配3个或4个字符似乎很简单(对于大多数shell):
$ printf '%s\t%s\n' "${string#???}" "${string%????}"
W2345678 H08W234
对于较旧的外壳(例如Bourne外壳),请使用:
$ string=H08W2345678
$ expr " ${string}" : " ...\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\)...." '
H08W234
如果需要数字字符计数,请使用:
$ expr " ${string}" : " .\{3\}\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\).\{4\}" '
H08W234
当然,这些正则表达式也可用于sed,awk和bash 3.0+:
$ echo "$string" | sed 's/^.\{3\}//'
W2345678
$ echo "$string" | sed 's/.\{4\}$//'
H08W234
$ echo "$string" | awk '{sub(/^.{3}/,"")}1'
W2345678
$ echo "$string" | awk '{sub(/.{4}$/,"")}1'
H08W234
$ r='^.{3}(.*)$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
W2345678
$ r='^(.*).{4}$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
H08W234
sed
吗?