我想找到一个词在文本文件中出现的位置——就像一个词出现在文本中的词数——对于那个词的所有实例,但我什至不知道从哪里开始。我想我需要一个循环,以及 grep 和 wc 的某种组合。
例如,这是一篇关于 iPhone 11 的文章:
周二,该公司表示,其入门级手机 iPhone 11 的起售价为 700 美元,而去年同类机型的起价为 750 美元,这表明苹果正在关注那些不会竞相购买更昂贵手机的消费者。年。
苹果将其更高级机型 iPhone 11 Pro 和 iPhone 11 Pro Max 的起售价维持在 1,000 美元和 1,100 美元。该公司在其硅谷园区举行的 90 分钟新闻发布会上推出了新手机。
课文共81个字。
jaireaux@macbook:~$ wc -w temp.txt
81 temp.txt
Run Code Online (Sandbox Code Playgroud)
“iPhone”这个词出现了 3 次。
jaireaux@macbook:~$ grep -o -i iphone temp.txt | wc -w
3
Run Code Online (Sandbox Code Playgroud)
我想要的输出是这样的:
jaireaux@macbook:~$ whereword iPhone temp.txt
24
54
57
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能得到那个输出?
这是使用 GNU 工具的一种方法:
$ tr ' ' '\n' < file | tr -d '[:punct:]' | grep . | grep -nFx iPhone
25:iPhone
54:iPhone
58:iPhone
Run Code Online (Sandbox Code Playgroud)
第一个tr
用换行符替换所有空格,然后第二个删除所有标点符号(以便iPhone,
可以作为单词找到)。在grep .
我们跳过任何空行(我们不希望这些计数)和确保grep -n
追加的行号到输出。然后,-F
告诉grep
不要将其输入视为正则表达式,并且-x
它应该只找到跨越整行的匹配项(因此job
不会算作 的匹配项jobs
)。请注意,您在问题中给出的数字相差 1。
如果你只想要数字,你可以添加另一个步骤:
$ tr ' ' '\n' < file | tr -d '[:punct:]' | grep . | grep -nFx iPhone | cut -d: -f1
25
54
58
Run Code Online (Sandbox Code Playgroud)
正如评论中指出的那样,这仍然会遇到诸如aren't
or 之类的“单词”问题double-barreled
。您可以使用以下方法进行改进:
tr '[[:space:][:punct:]]' '\n' < file | grep . | grep -nFx iPhone
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
503 次 |
最近记录: |