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つの同じ単語のペアのみを検索します。例:単語の単語単語 - >単語の単語(カップル)単語の単語単語の単語 - >単語の単語単語の単語(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

関連情報