我有一个字典(不是python dict),包含许多这样的文本文件:
##Berlin
-capital of Germany
-3.5 million inhabitants
##Earth
-planet
如何用事实显示字典的一个条目?
谢谢!
答案 0 :(得分:1)
你做不到。 grep无法显示可变数量的上下文。您可以使用-A在匹配后显示一定数量的行,例如-A3
以在匹配后显示三行,但它不能是可变数量的行。
您可以编写一个快速Perl程序,以“段落模式”从文件中读取,然后打印与正则表达式匹配的块。
答案 1 :(得分:0)
如果您的示例文件名为file.dict
:
awk -v term="earth" 'BEGIN{IGNORECASE=1}{if($0 ~ "##"term){loop=1} if($0 ~ /^$/){loop=0} if(loop == 1){print $0}}' *.dict
返回:
##Earth
-planet
只需将变量term
更改为您要查找的条目。
假设两件事:
答案 2 :(得分:0)
如果你的grep支持perl正则表达式,你可以这样做:
grep -iPzo '(?s)##Berlin.*?\n(\n|$)'
有关此模式的更多信息,请参阅this answer。
您也可以使用GNU这样做:
query=berlin
sed -n "/$query/I"'{ :a; $p; N; /\n$/!ba; p; }'
也就是说,当找到不区分大小写的$query
时,打印直到找到空行(/\n$/
)或文件末尾($p
)。
两种情况下的输出(空白的微小差异):
##Berlin
-capital of Germany
-3.5 million inhabitants