从文件中搜索并打印单词

时间:2014-07-18 13:10:18

标签: regex bash search awk

我正在尝试用静态搜索字符串捕获一个单词。

搜索字符串: customfield_12345

这是我尝试提供给awk脚本的源文件:

输入文件:abc.log

{"expand":"hello,foo,boo,doo","id":"546546","self":"http://localhost/abc/rest/api/latest/issue/12345","key":"abcd-4567","fields":{"customfield_12345":"$D21.0/dfgdf/string_to_capture_from_file "}}

查询:awk '{for(i=1;i<=NF;i++){if($i~/^customfield_12345/){print $i}}}' abc.log

预期输出: string_to_capture_from_file

我想使用grep和cat的组合,但不知何故选项“-o”并不适用于所有平台。

2 个答案:

答案 0 :(得分:1)

您的输入文件包含JSON字符串,因此我将其解析为JSON而不是使用正则表达式:

python -c "import json;json_data=open('abc.log');data = json.load(json_data);print data['fields']['customfield_12345'];json_data.close();"

答案 1 :(得分:1)

awk不适合您的情况。找出relvant分隔符可能会很麻烦,并且使用其他答案建议的JSON解析器会更容易。

但是,在您的具体情况下,您可以修改您的查询,如下所示:

MYVAR=awk -F'":"|","|{"|"}' '{for(i=1;i<=NF;i++){if($i~/customfield_12345/){i++;print $i}}}' test
echo ${MYVAR##*/} 

-F允许我们将":"","{""}设置为内部字段分隔符。当awk遇到其中一个模式时,它会将该行分成几列。

这将返回$D21.0/dfgdf/string_to_capture_from_file,您可以稍后使用echo ${MYVAR##*/}

使用bash进行解析