我的文件:
Informatica(r) PMCMD, version [10.2.0 HotFix2], build [1911.0401], Workflow run status: [Failed]
我需要的输出是Failed
我得到的输出是10.2.0 HotFix2
使用的命令:
grep "Workflow run status:" test.txt | cut -d'[' -f2 | cut -d']' -f1
如果 Workflow run status: 出现在任何字段中,我的目标是搜索 Workflow run status: 然后打印该字段的状态。因为工作流程运行状态:可以出现在任何行或字段中
答案1
cut -d'[' -f2
为您提供第二个[
分隔字段。在
Informatica(r) PMCMD, version [10.2.0 HotFix2], build [1911.0401], Workflow run status: [Failed]
<---------- field 1 ---------> <------ field 2 ------> <------------ field 3 -----------> <field 4>
如果您愿意,您宁愿想要第四个字段Failed
。然而,使用来sed
提取之后的部分Workflow run status
会更有意义:
sed -n 's/^.*Workflow run status: \[\([^]]*\)\].*$/\1/p' < file
或者,正如您问题上的原始标签表明您使用的是 GNU 系统,请让 GNUgrep
通过以下方式提取它:
grep -Po 'Workflow run status: \[\K[^]]*' < file
这些将提取该部分,而Workflow run status: [there]
不必依赖于[
线路上有多少个。
答案2
awk -F "[,:]" '{for(i=1;i<=NF;i++){if($i ~ /Workflow run status/){gsub(/[\[\]]/,"",$(i+1));print $(i+1)}}}' filename
output
Failed