Grep

使用 ripgrep 查找相鄰單詞

  • February 2, 2022

如何使用 ripgrep 查找相鄰的重複單詞。例如

one hello hello world

如何hello hello使用 ripgrep 定位?

解決了

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

您也可以使用 GNU grep(用於反向引用擴展):

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

為了您可以使用的便攜性:

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

-w如果您想在單詞邊界上匹配,請添加;


man grep

反向引用和子表達式

反向引用 \n,其中 n 是單個數字,匹配先前由正則表達式的第 n 個帶括號的子表達式匹配的子字元串。

這是awk的解決方案:

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

這將只搜尋 2 個相同單詞的對 - 例如:word word word -> word word(一對) word word word word -> word word word word(兩對)

如果要計算每行中相鄰相同單詞的數量:

{
   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

引用自:https://unix.stackexchange.com/questions/689015