Unix Shell Script从String中提取数字

时间:2015-04-09 16:26:33

标签: bash shell unix

如何使用unix shell脚本从下面的字符串中提取粗体数字?

17: H.0(-2073):File ID (40008)in xyz file not equal to the file ID(**40004**)in file header.

谢谢:)

1 个答案:

答案 0 :(得分:3)

echo '17: H.0(-2073):File ID (40008)in xyz file not equal to the file ID(40004)in file header.' | sed -e 's/.*(\([0-9]*\)).*/\1/'

此行的第二部分使用命令s(替换)运行sed。前两个斜杠(/)之间的部分是regular expression,它匹配以下内容:

一切(.*)以贪婪的方式,即直到最后一次出现括号中的任意数字(([0-9]*))然后再一切(.*)直到行尾。 \(\)之间的表达式(在这种情况下为40004)将被记忆,以便在s命令的第二部分中使用。

第二个/和第三个/之间的部分是我们要放置的部分,而不是与正则表达式匹配的行。这里是\1,意味着引用第一次出现\(\)之间的子字符串,在我们的例子中是40004

因此|之后的部分用从中提取的字符串40004替换整个输入字符串。正则表达式是强大的,但通常是只写技术,所以我希望这种解释会带来更多的清晰度。