Grep
使用 ripgrep 查找相鄰單詞
如何使用 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