如何从文件开头“xxTHISISMYSTRING”中包含任意2个字符的查询字符串的字符串?

时间:2016-06-30 18:41:43

标签: bash grep

我有一个格式为多行的文件:

  

hhhhhhhhhhhhhhhhhhh的 hhaaaa hhhhhhhhhhhhhh   hhhhhhhhhhhhhhhhhhh的 oaaaaa hhhhhhhhhhhhhh   hhhhhhhhhhhh的 hbaaaa hhhhhhhhhhhhhhhhhhhhh   hhhhhhhhhhhhhhhhhhhhh的 fbaaaa hhhhhhhhhhhh

我想找到包含“aaaa”主题的所有字符串以及它前面的两个字母。

我怎么会把这些字符串弄出来: hhaaaa,oaaaaa,hbaaaa,fbaaaa ?以“ aaaa ”作为我的输入。

3 个答案:

答案 0 :(得分:2)

要匹配正则表达式中的任何字符,请使用.

$ grep -o ..aaaa file
hhaaaa
hoaaaa
hbaaaa
fbaaaa

-o选项告诉grep只打印匹配项,而不是匹配项的上下文。

要将匹配限制为字母字符,请使用字母类:

$ grep -Eo '[[:alpha:]]{2}aaaa' file
hhaaaa
hoaaaa
hbaaaa
fbaaaa

[[:alpha:]]匹配任何字母字符。与A-Z不同,这是unicode-safe。 {2}表示两个这样的字符。为避免反斜杠,我们添加了-E标志以启用扩展正则表达式。

答案 1 :(得分:2)

grep -oh "..aaaa" file.txt

会做的。

  

-h, - no-filename
      禁止输出上的文件名前缀。这是默认的
      当只有一个文件(或只有标准输入)进行搜索时   -o, - 只匹配
      仅打印匹配行的匹配(非空)部分,
      将每个这样的部分放在一个单独的输出线上。

答案 2 :(得分:2)

grep -o '..aaaa' file

应该这样做。如果目标是计算总比赛数,那么请执行:

grep -o '..aaaa' file | wc -l

GREP联机帮助页说:

  

-o, - 仅匹配
仅打印匹配的(非空)部分   一条匹配的线,每个这样的部分都在一条单独的输出线上。

WC手册页说:

  

-l, - lines
打印换行计数