首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用grepwin提取两个关键字之间的多行字符串

问如何使用grepwin提取两个关键字之间的多行字符串
EN

Stack Overflow用户
提问于 2014-11-27 14:05:02
回答 1查看 740关注 0票数 0

嗨,我有一个文件目录,每个文件都有多个语言、多行的文本字符串。使用grepwin,我想提取所有的英文文本字符串并保存到另一个文本文件中。通常,在每个文件中,英文文本都在开关/用例条件中,如下所示:

代码语言:javascript
复制
Default //English
    bitmap 8 20 "bmp5/warning.bmp"
    Ltext 5 1 11 "USB Device Overload"      
    LText 85 20 13 "USB"
    Ltext 50 33 13 "Device Overload!"
Break

Case _French
            bitmap 8 20 "bmp5/warning.bmp"
            LTEXT 5 1 11 "Surcharge clé USB!" 
            LTEXT 45 30 13 "Surcharge clé USB" 
Break 

因为所有的英文文本总是介于‘默认’和‘中断’之间,我想使用这两个关键字作为标记。最后,两个关键字之间的所有文本都需要保存到另一个文本文件中。

有人能帮上忙吗。

谢谢各位

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-27 14:09:02

通过grep。

代码语言:javascript
复制
$ grep -oPz '(?s)(?<=\n|^)Default\b[^\n]*\n\K.*?(?=\nBreak\b)' file
    bitmap 8 20 "bmp5/warning.bmp"
    Ltext 5 1 11 "USB Device Overload"      
    LText 85 20 13 "USB"
    Ltext 50 33 13 "Device Overload!"

若要将结果保存到另一个文件,需要使用输出重定向操作符。

代码语言:javascript
复制
grep -oPz '(?s)(?<=\n|^)Default\b[^\n]*\n\K.*?(?=\nBreak\b)' infile > outfile

来自man grep

代码语言:javascript
复制
  -P, --perl-regexp         PATTERN is a Perl regular expression
  -z, --null-data           a data line ends in 0 byte, not newline
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27172519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档