我有几行看起来像这样:
$config['upload_path'] = './media/resumes/';
$config['allowed_types'] = 'pdf|doc|docx';
$config['max_size'] = '100000';
$this->load->library('upload', $config);
if(!$this->upload->do_upload("myfile")){
$this->upload->display_errors();
}
else{
$file = $this->upload->data();
$filename = $file['file_name'];
}
在其中两行中,有{strong>两个个aaaaaaaaxzaaaaaaaaaaaaaa
bbbbbbbbbbbbxzbbbbbbxzbb
ccxzcccccccccccccccccxzc
dddddddxzddddddddddddddd
个字符的实例。我希望grep在同一行中查找xz
两次并输出它匹配的行。如果xz
出现一次,我就不想知道了。
运行以下内容:
xz
告诉我xz on的所有行,但我只想看到xz出现两次的行。
如何让模式搜索在同一行重复?
答案 0 :(得分:10)
您可以使用
cat lines | grep 'xz.*xz'
或者只是
grep 'xz.*xz' lines
.*
将匹配2 xz
之间的可选字符(除了换行符之外的任何字符)。
如果您需要使用环视,则需要-P
切换以启用类似Perl的regexp。
答案 1 :(得分:4)
awk是一种方法:
awk -F'xz' 'NF==3' file
或
awk 'gsub(/xz/,"")==2' file
awk带给您的另一个好处是,更容易检查匹配less then n times
,exact n times
或greater than n times
的模式。您只需将==
更改为<, <=, >, >=
答案 2 :(得分:1)
如果要完整输出匹配的行,则不需要选项
grep 'xz.*xz' filename
会做