我正在尝试用静态搜索字符串捕获一个单词。
搜索字符串: 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”并不适用于所有平台。
答案 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##*/}