한 줄에 여러 번 나타나는 문자열을 검색하는 방법은 무엇입니까?

한 줄에 여러 번 나타나는 문자열을 검색하는 방법은 무엇입니까?

문자열을 검색하는 데 사용할 수 있다는 것을 알고 있습니다 grep. 하지만 검색 중인 문자열이 여러 번 나타나는 줄만 출력에 표시하려면 어떻게 해야 합니까? 나는 선호한다 grep.

명확히 하기 위해 키워드가 여러 번 나타나는 줄을 인쇄해야 합니다(예: 두 번 이상 또는 적어도 두 번). 하지만 정확히 두 줄이 있는 줄을 의미하는 것은 아닙니다.

답변1

검색 문자열이 줄의 어느 위치에나 나타날 수 있는 경우 grep 'str.*str'최소한 두 번 일치하는 항목을 만들 수 있습니다.

문자열을 여러 번(예: 최소 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

관련 정보