0

我有一个字典(不是 python 字典),包含许多这样的文本文件:

##Berlin                
-capital of Germany         
-3.5 million inhabitants

##Earth           
-planet

我怎样才能用事实显示字典的一个条目?

谢谢!

4

3 回答 3

1

你不能。grep 无法显示可变数量的上下文。您可以使用 -A 在匹配后显示设定的行数,例如在匹配-A3后显示三行,但不能是可变的行数。

您可以编写一个快速的 Perl 程序以“段落模式”从文件中读取,然后打印与正则表达式匹配的块。

于 2012-12-06T15:29:56.590 回答
0

正如 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您要查找的条目。

假设两件事:

  1. 字典文件具有相同的扩展名(例如.dict)
  2. 字典文件都在同一个目录中(命令被调用的地方)
于 2012-12-06T16:00:46.870 回答
0

如果你的 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
于 2012-12-06T22:17:51.993 回答