如何在 shell 脚本中获取匹配文本字段的值

how to get value of a matching text field in shell script

我想通过读取整个文件来捕获给定文本字段的第一次出现值。如何在 shell 中实现这一点:

输入行:

<coverage lines-valid="3966"  lines-covered="2094"  line-rate="0.528"  branches-valid="5864"  branches-covered="1400"  branch-rate="0.23870000000000002"  timestamp="1532416636656" complexity="0" version="0.1">

我需要获取 line-rate 字段第一次出现的值。

既然你提到你阅读了整个文件,那么首先 grep 其中包含 "line-rate" 的行:

grep "line-rate" input-file

那么你只需要第一次出现:

grep "line-rate" input-file | head -1

最后你想要 "line-rate" 值:

grep "line-rate" input-file | head -1 | sed 's/.*line-rate="\([0-9.]\+\)" .*//'

sed 的解释:

  • .* 任何东西
  • 其次是 line-rate="
  • [0-9.]:字符 0 到 9 和点
  • \+:至少前面一项,没有最大值
  • \( \):划定我要保留的,这里是数字
  • .*: 以下所有内容
  • </code>:替换为 <code>\( \)
  • 所包含的内容

所以这里它将取 line-rate=" 之后的任何数字(带点或不带点),并以 " 结束。

显然,将 input_file 替换为您的文件名。

这是使用 bash、使用 GNU sed 完成的。