文字列を検索するために使用できることを知っていますgrep
。しかし、検索している文字列が複数回表示される行だけを出力に表示するにはどうすればよいですか?私は好むgrep
。
明確にするために、キーワードが複数回表示される行を印刷する必要があります(たとえば、2回以上または少なくとも2回)。しかし、正確に2行の行を意味するわけではありません。
答え1
検索文字列が行のどこにでも表示できる場合は、grep 'str.*str'
少なくとも2回一致する項目を作成できます。
文字列を複数回(たとえば、少なくとも3回)一致させたい場合は、次のことができますgrep '\(.*str\)\{3\}'
。
答え2
2つ以上の項目を検索できません。文字列grepが使用される行では、「文字列」を連結するために正規表現構文を使用する必要があるため、文字列はもはや文字列ではなく正規表現です。たとえば、2つ以上の文字列を見つけるには、代わりにawkを使用する必要があります.*
。
$ echo 'foo.*bar' | awk -v str='.*' '(s=index($0,str)) && index(substr($0,s+length(str)),str)'
$
$ echo 'foo.*bar.*etc' | awk -v str='.*' '(s=index($0,str)) && index(substr($0,s+length(str)),str)'
foo.*bar.*etc