jian Asked: 2022-02-03 08:33:59 +0800 CST2022-02-03 08:33:59 +0800 CST 2022-02-03 08:33:59 +0800 CST 使用 ripgrep 查找相邻单词 772 如何使用 ripgrep 查找相邻的重复单词。例如 one hello hello world 如何hello hello使用 ripgrep 定位? 解决了 rg '(hello)[[:blank:]]+\1' --pcre2 <<<'one hello hello world' grep ripgrep 2 个回答 Voted Best Answer αғsнιη 2022-02-03T09:28:01+08:002022-02-03T09:28:01+08:00 您也可以使用 GNU grep(用于反向引用扩展): grep -E '(hello)[[:blank:]]+\1' <<<'one hello hello world' 为了您可以使用的便携性: grep '\(hello\)[[:blank:]][[:blank:]]*\1' -w如果您想在单词边界上匹配,请添加; 从man grep: 反向引用和子表达式 反向引用 \n,其中 n 是单个数字,匹配先前由正则表达式的第 n 个带括号的子表达式匹配的子字符串。 golder3 2022-02-03T09:19:17+08:002022-02-03T09:19:17+08:00 这是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
您也可以使用 GNU grep(用于反向引用扩展):
为了您可以使用的便携性:
-w
如果您想在单词边界上匹配,请添加;从man grep:
这是awk的解决方案:
这将只搜索 2 个相同单词的对 - 例如:word word word -> word word(一对) word word word word -> word word word word(两对)
如果要计算每行中相邻相同单词的数量:
用法: