如何使用unix shell脚本从下面的字符串中提取粗体数字?
17: H.0(-2073):File ID (40008)in xyz file not equal to the file ID(**40004**)in file header.
谢谢:)
答案 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
替换整个输入字符串。正则表达式是强大的,但通常是只写技术,所以我希望这种解释会带来更多的清晰度。