如何在 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 完成的。
我想通过读取整个文件来捕获给定文本字段的第一次出现值。如何在 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 完成的。