UNIX BASH:从字符串中提取数字

时间:2010-08-25 19:58:54

标签: string bash unix

对于有经验的UNIX用户来说,这可能是一个非常简单的问题,但是我正在尝试从字符串中提取数字并继续得到错误的结果。

这是字符串:

8962 ? 00:01:09 java

这是我想要的输出

8962

但由于某种原因,我一直收到相同的字符串。这就是我试过的

pid=$(echo $str | sed "s/[^[0-9]{4}]//g")

如果有人能帮助我,我们将不胜感激。

6 个答案:

答案 0 :(得分:11)

皮肤猫的方法不止一种:

pti@pti-laptop:~$ echo 8962 ? 00:01:09 java | cut -d' ' -f1
8962
pti@pti-laptop:~$ echo 8962 ? 00:01:09 java | awk '{print $1}'
8962

cut基于分隔符或字节范围在不同字段中剪切一行,并且在这些任务中通常很有用。

awk是一种较旧的编程语言,特别适用于一次一行。

答案 1 :(得分:3)

Shell,无需调用外部工具

$ s="8962 ? 00:01:09 java"
$ IFS="?"
$ set -- $s
$ echo $1
8962

答案 2 :(得分:3)

Pure Bash:

string='8962 ? 00:01:09 java'
pid=${string% \?*}

或者:

string='8962 ? 00:01:09 java'
array=($string)
pid=${array[0]}

答案 3 :(得分:2)

我认为这就是你想要的:

pid=$(echo $str | sed 's/^\([0-9]\{4\}\).*/\1/')

答案 4 :(得分:2)

Pure Bash:

string="8962 ? 00:01:09 java"

[[ $string =~ ^([[:digit:]]{4}) ]]

pid=${BASH_REMATCH[1]}

答案 5 :(得分:1)

/^[0-9]{4}/匹配字符串

开头的4位数字