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

时间:2014-11-27 14:05:02

标签: grep

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

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 

由于所有英文文本总是在'Default'和'Break'之间,我想使用这两个关键字作为分隔符。最后,两个关键字之间的所有文本都需要保存到另一个文本文件中。

任何人都可以提供帮助。

谢谢你们

1 个答案:

答案 0 :(得分:0)

通过grep。

$ 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!"

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

grep -oPz '(?s)(?<=\n|^)Default\b[^\n]*\n\K.*?(?=\nBreak\b)' infile > outfile

来自man grep

  -P, --perl-regexp         PATTERN is a Perl regular expression
  -z, --null-data           a data line ends in 0 byte, not newline