下面是我的文本文件
{"Author":"john"
"subject":"java"
"title":"java cook book.pdf"}
{"title":"Php book.pdf"
"Author":"Smith"
"subject":"PHP"}
{"Author":"Smith"
"title":"Java book.pdf"}
从上面的数据我想提取所有包含“java”字的标题,我应该得到以下输出
java cook book.pdf
Java book.pdf
请建议我
由于
答案 0 :(得分:3)
答案 1 :(得分:2)
您可以使用awk
尝试类似的内容:
awk -F: '$1~/title/&&tolower($2)~/java/{gsub(/\"/,"",$2);print $2}' file
-F:
将字段分隔符设置为:
$1~/title
检查第一列title
tolower($2)~/java/
检查第二列java
不区分大小写gsub(..)
将删除"
。print $2
打印您的第二列答案 2 :(得分:1)
我会避免任何复杂的解决方案,而是依赖旧的好grep + awk + tr代替:
$ grep '"title":' test.txt | grep '[Jj]ava' | awk -F: '{print $2}' | tr -d [\"}]
java cook book.pdf
Java book.pdf
的工作原理如下:
"title":
Java
或java
:
并显示第二个字段"
和}
标志答案 3 :(得分:0)
你绝对应该使用json解析器来获得完美的结果..我喜欢PHP提供的那个,如果你的文件是,如图所示,用空行分隔的一堆json块:
foreach( explode("\n\n", file_get_contents('/your/file.json_blocks')) as $js_block ):
$json = json_decode( trim($js_block) );
if ( isset( $json['title'] ) && $json['title'] && stripos($json['title'], 'java') ):
echo trim($json['title']), PHP_EOL;
endif;
endforeach;
对于任何给定的sed / awk / grep / et组合,这将更加肯定,因为json遵循特定的格式,而应与a一起使用解析器。举个例子,'title'中的一个简单的新行对json没有实际意义,但会打破Jaypal提供的解决方案..请看一下类似的问题:用正则表达式解析xhtml以及为什么你不应该这样做它:RegEx match open tags except XHTML self-contained tags