我有一个看起来像这样的字符串:
“abcderwer 123123 10,200 asdfasdf iopjjop”
现在我想提取数字,遵循方案xx,xxx,其中x是0-9之间的数字。例如。 10200。必须是五位数,并且必须包含“,”。
我该怎么做?
谢谢
答案 0 :(得分:9)
您可以使用grep
:
$ echo "abcderwer 123123 10,200 asdfasdf iopjjop" | egrep -o '[0-9]{2},[0-9]{3}'
10,200
答案 1 :(得分:4)
纯粹的Bash:
pattern='([[:digit:]]{2},[[:digit:]]{3})'
[[ $string =~ $pattern ]]
echo "${BASH_REMATCH[1]}"
答案 2 :(得分:1)
检查模式匹配和正则表达式。
链接:
并且如上所述,利用模式匹配的一种方法是使用grep。 其他用途:echo支持模式(globbing),find支持正则表达式。
答案 3 :(得分:0)
简单模式匹配(glob模式)内置于shell中。假设你有$*
中的字符串(也就是说,它们是你脚本的命令行参数,或者你已经在你已经获得的字符串上使用了set
),试试这个:
for token; do
case $token in
[0-9][0-9],[0-9][0-9][0-9] ) echo "$token" ;;
esac
done
答案 4 :(得分:0)
以下使用输入数据字符串的示例应使用sed解决问题。
$ echo abcderwer 123123 10,200 asdfasdf iopjjop | sed -ne 's/^.*\([0-9,]\{6\}\).*$/\1/p'
10,200
答案 5 :(得分:0)
一个稍微不典型的解决方案:
< input tr -cd [0-9,\ ] | tr \ '\012' | grep '^..,...$'
(第一个删除除逗号,空格和数字之外的所有内容 第二个tr用空行替换空格,将每个“数字”放在一个单独的位置 除了符合你标准的那些之外,grep会丢弃所有内容。)