sed 和grep 统计/etc/init.d/functions文件中每个单词的出现次数,结果不同

本文探讨了如何使用grep和sed统计/etc/init.d/functions文件中每个单词的出现次数。通过举例说明,发现grep的-o选项可以过滤出单词,而sed在处理时遇到困难,因为其正则表达式难以实现单词的精确筛选,导致结果包含非单词的多个字母。作者寻求使用sed过滤非单词的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:统计/etc/init.d/functions文件中每个单词的出现次数, 并排序(用grep和sed两种方法分别实现)

一、grep

1.有一个 -o 选项,可以把一行中的所有单词的都过滤出来

egrep -o "\<[[:alpha:]]+\>" /etc/init.d/functions |sort |uniq -c |sort -n

这里写图片描述
结果太多,只截后面一部分的
这里写图片描述

二、sed

sed -r 's@[^[:alpha:]]+@\n@g' /etc/init.d/functions |sort |uniq -c |sort -n

这里写图片描述
结果太多,只截后面一部分的
这里写图片描述

显示结果差了好多

这里写图片描述

分析

1.sed如果要对一行中的多个单词进行正向截取很难
因为,截取时使用
's@.*[^[:alpha:]](\<[[:alpha:]]+\>).*@\1@p'
一行只能替换出一个单词

2.所以只能进行反向替换,把不是单词的替换为换行符/n。

a.单词是有**分隔符隔开**的多个英文字母
例如( 空格 -  引号  )等

4.把**不是单词**的字符替换为空
即 **不是单词**---->   **不是**\<[[:alpha:]]+\>   ;

5.可是使用sed正则只能表示
不是多个字母 —-> [^[:alpha:]]+

6.所以使用sed后果就是把不是多个字母替换为换行了,
剩下的是 单词非单词的多个字母

会出现类似以下的情况

echo "w(or4d)hi hello"| sed  -r 's@[^[:alpha:]]+@\n@g'

这里写图片描述
只有 hello是 单词,可是把不是单词的英文字母也截取出来了

三、如果哪位道友知道如何用sed过滤非单词,希望评论区留个言或者私信下,谢谢

这里写图片描述

1.将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中 2. 显示当前目录并统计当前目录下文件数 3.计算1+2+3+..+99+100的总 4.将PATH变量每个目录显示在独立的一行 5、显示/proc/meminfo文件中以大小s开头的行 6、显示/etc/passwd文件中不以/bin/bash结尾的行 7、找出/etc/passwd中的两位或三位数 8、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行 9、在给定的sample.txt文件中搜索有the的行,并输出行号 10、在给定的sample.txt文件中搜索没有the的行,并输出行号 11、在给定的sample.txt文件中搜索oo前没有g的字符串所在的行. 12、在给定的sample.txt文件中搜索包含数字的行 13、在给定的sample.txt文件中搜索the在开头的行 14、在给定的sample.txt文件中搜索开头不是英文字母的行 15、在给定的sample.txt文件中搜索末尾是.的行 16、在给定的sample.txt文件中搜索空行 17、在给定的sample.txt文件中搜索两个o以上的字符串 18、在给定的sample.txt文件中搜索g开头结尾的字符串在的行 19、在给定的sample.txt文件中搜索包含两个o的字符串的行。 20、在给定的sample.txt文件中搜索g后面跟2~5个o,后面再跟一个g的字符串的行。 21、在给定的sample.txt文件中搜索包含g后面跟2个以上o,后面再跟g的行。。 22、显示/etc/passwd 上所有系统用户的用户名UID(注:、/etc/passwd中字段之间用 “:”分隔) 23、显示/etc/passwd三个用户root、mage、wang(注第二第三个用户根据你机器实际情况确定)的第1、37个字段信息。(注:、/etc/passwd中字段之间用 “:”分隔) 24、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行 linux
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值