文本提取查询

文本提取查询

我有一个类似于下面显示的示例的文本文件:

139
text string
text string
text string
text string
text string
text string

139
fdghdfkljsghaksjgh
fdkdsjahgks
fklsdjghlksdjh
jksdgh

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

139

text string
text string
text string
text string
text string
text string
text string
text string

139

dfhsdglka
dfhglasd3489 57
sdauufh348977
3o487562348ryoius
85734uyf

139

text string
text string
text string
text string
text string
text string
text string

139

lksfh;klhdg;
dhfglsdhfg
jhdfgljasdhgf
dhfgkladhfg
hdgfla
fgjlad

我希望提取 -s 之间的所有文本139(显示文本块“文本字符串”)并将其复制到另一个文件,同时忽略随机字符(不复制)。我也不想139在新文件中显示。上面提到的“文本字符串”表示包含多个段落的文本块。

答案1

使用多个 perl 和 aspell 的一行代码(为了识别随机字符串):

perl -0777 -ne 'while(m/(?<=139)(.*(\n)*)*(?=139)/g){print "$&\n";}' /path/to/file | \
perl -0777 -pe 's/139\n//g' | \
while read line; \
do if [ "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell clean`" \
!= "`echo $line | perl -0777 -pe 's/[^a-zA-Z\s]//g' | aspell list`" ]; \
then echo $line; fi; done

具体过程如下:

  • 提取 139 之间的块(这样最后一个块就留在外面了)
  • 删除了 139 行
  • 将行输入到“while do done”循环中,在此循环中根据字典检查字母字符。如果行中包含字典中的任何单词,则回显整行。否则,将删除该行。

注意:必须安装正确的 aspell 词典

相关内容