我有一个格式为多行的文件:
hhhhhhhhhhhhhhhhhhh的 hhaaaa hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhh的 oaaaaa hhhhhhhhhhhhhh hhhhhhhhhhhh的 hbaaaa hhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhh的 fbaaaa hhhhhhhhhhhh
我想找到包含“aaaa”主题的所有字符串以及它前面的两个字母。
我怎么会把这些字符串弄出来: hhaaaa,oaaaaa,hbaaaa,fbaaaa ?以“ aaaa ”作为我的输入。
答案 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
打印换行计数