如何在每次出现特定字符之前打印10个字母?

Vil*_*age 1 bash perl grep

使用grep,我可以在我的文档中打印所有出现的大写字母"Z".但是,输出将显示文档中每个"Z"的整行.我需要将此限制为仅打印每次出现"Z"之前出现的10个字母.

例如,如果文档有一行"AAAABBBBBBBBBCCCCCCDDDDDDDZ",它将打印"CCDDDDDDD",之前出现的10个字母.

  • 如果"Z"之前的字母少于10个,则无需打印任何内容.
  • 如果"Z"在一行中出现多次,则应打印每个"Z"前面的10个字母,例如:"AAAABBBBBBBBBZCCCCCDDDDDDDZ"将打印"ABBBBBBBBB"和"CCDDDDDDDZ".

结果将是这些字母的输出列表,例如:

ABBBBBBBBB
CCDDDDDDDZ
Run Code Online (Sandbox Code Playgroud)

如何在文档中每次出现字母"Z"之前打印10个字母?

ani*_*ane 9

简单:

grep -oP '.{10}(?=Z)' <<< AAAABBBBBBBBBZCCCCCDDDDDDDZ
Run Code Online (Sandbox Code Playgroud)

说明:

-o     : Print only match, not entire line
-P     : Use PCRE / Perl regex
.{10}  : Match is any 10 characters,
(?=z)  : which are followed by "Z". (Search for positive look-ahead for more details)
<<< ...: Here string
Run Code Online (Sandbox Code Playgroud)

编辑:

注意:如果我们想要的10个字符重叠,则不起作用.例如input = AAAABBBBBBBBBZDDDDDDZ.如果输入包含这样的模式,请参阅igegami的答案