我有一个字典(不是 python 字典),包含许多这样的文本文件:
##Berlin
-capital of Germany
-3.5 million inhabitants
##Earth
-planet
我怎样才能用事实显示字典的一个条目?
谢谢!
我有一个字典(不是 python 字典),包含许多这样的文本文件:
##Berlin
-capital of Germany
-3.5 million inhabitants
##Earth
-planet
我怎样才能用事实显示字典的一个条目?
谢谢!
你不能。grep 无法显示可变数量的上下文。您可以使用 -A 在匹配后显示设定的行数,例如在匹配-A3
后显示三行,但不能是可变的行数。
您可以编写一个快速的 Perl 程序以“段落模式”从文件中读取,然后打印与正则表达式匹配的块。
正如 andy lester 指出的那样,你不能让 grep 在 grep 中显示可变数量的上下文,但是一个简短的 awk 语句可能会满足你的期望。
如果您的示例文件名为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
您要查找的条目。
假设两件事:
如果你的 grep 支持 perl 正则表达式,你可以这样做:
grep -iPzo '(?s)##Berlin.*?\n(\n|$)'
有关此模式的更多信息,请参阅此答案。
你也可以像这样使用 GNU sed 来做到这一点:
query=berlin
sed -n "/$query/I"'{ :a; $p; N; /\n$/!ba; p; }'
也就是说,当发现不区分大小写时$query
,打印直到找到空行(/\n$/
)或文件结尾($p
)。
两种情况下的输出(空格的细微差别):
##Berlin
-capital of Germany
-3.5 million inhabitants