【问题标题】:Count number of words that have at least 2 same consecutive letters BASH计算至少有 2 个相同的连续字母 BASH 的单词数
【发布时间】:2022-01-15 15:09:49
【问题描述】:

我试图计算至少有两个连续字母相同的单词的数量,

我尝试使用 grep 命令,首先我使用 tr 命令让每个单词在新行中显示,然后我使用 grep 匹配模式,

tr ' ' '\12' | grep -c '\(.*\).\1'

但这给了我所有单词的计数 当我在没有 -c 选项的情况下使用 grep 的相同命令时 我只看到匹配的单词中的字母以红色突出显示,如下所示:

https://i.stack.imgur.com/Vfjys.png 我也尝试过使用: tr ' ' '\12' | '\(.*\).\1' | wc -l 得到 24 而不是 5。

【问题讨论】:

标签: bash shell command-line grep


【解决方案1】:

鉴于此输入文本lorem-ipsum.txt

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum

与上面相同的文本,其双字母突出显示:

Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliquaUt enim ad minim veniam quis nostrud exercitation (1) ullamco laboris nisi ut aliquip ex ea (2) commodo consequatDuis aute irure dolor in reprehenderit in voluptate velit (3) esse (4) cillum dolore eu fugiat (5) nulla pariaturExcepteur sint (6) occaecat cupidatat non proident sunt in culpa qui (7) officia deserunt (8) mollit anim id est labourum

您计算包含连续双字母的单词:

tr -c '[:alpha:]' '\n' < lorem-ipsum.txt | grep -c '\(.\)\1'
  • tr -c '[:alpha:]' '\n':将非字母字符转换为换行符,因此每个单词在流中单独放置一行。
  • grep -c '\(.\)\1':计算任何捕获的字符 \(.\) 的出现次数,然后是其自身 \1

测试断言:

[ 8 -eq "$(tr -c '[:alpha:]' '\n' < lorem-ipsum.txt | grep -c '\(.\)\1')" ]

【讨论】:

  • 使用grep -o '\(.\)\1' file | wc -l不是更有意义吗?
  • @tripleee 在这种情况下,您会得到相同的结果,但如果文件包含非 alpha 重复(如 ... 作为省略号或数字 422),则将被计算在内。帖子标题明确说明了计算双字母(不包括标点符号和数字)。
  • @triplee 甚至给定一个只有字母的输入文件,它会计算 2 个连续字母出现的次数,而不是包含 2 个连续字母的单词数。例如,echo 'missippippi' | grep -o '\(.\)\1' | wc -l 将输出 3 而不是 1。
  • 哦,是的,看来我看错了问题......对不起,nvm
猜你喜欢
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多