使用 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

相关内容