ripgrep을 사용하여 인접한 단어 찾기

ripgrep을 사용하여 인접한 단어 찾기

ripgrep을 사용하여 인접한 중복 단어를 찾는 방법. 예를 들어

one hello hello world

hello hello위치에 ripgrep을 사용하는 방법은 무엇입니까 ?

해결됨

rg  '(hello)[[:blank:]]+\1' --pcre2  <<<'one hello hello world'

답변1

GNU grep을 사용할 수도 있습니다(역참조 확장):

grep -E '(hello)[[:blank:]]+\1' <<<'one hello hello world'

쉽게 이식하려면 다음을 사용할 수 있습니다.

grep '\(hello\)[[:blank:]][[:blank:]]*\1'

-w단어 경계에서 일치시키려면 다음을 추가하십시오.


~에서사람들은 grep:

역참조 및 하위 표현식
역참조 \n(여기서 n은 단일 숫자)은 이전에 정규식의 괄호로 묶인 n번째 하위 표현식과 일치한 하위 문자열과 일치합니다.

답변2

awk의 솔루션은 다음과 같습니다.

{
    for (i=1; i <= NF; i++) {
        if ($i == $(i+1)) {
            printf("%s %s\n", $i,$(i+1));
            i++;
        }
    }
}

이는 2개의 동일한 단어 쌍만 검색합니다. 예: 단어 단어 단어 -> 단어 단어(한 쌍) 단어 단어 단어 단어 -> 단어 단어 단어 단어(두 쌍)

각 줄에서 인접한 동일한 단어의 수를 계산하려면 다음을 수행하십시오.

{
    for (i=1; i <= NF; i++) {
        counter = 1;
        while ($i == $(i+1)) {
            counter++;
            i++;
        }
        if (counter > 1) {
            printf("%d %s %d\n", NR,$i,counter);
        }
    }
}

용법:

awk -f awk_script your_file

관련 정보