一、linux高级文本处理命令sed
面试题:某文件有多列数据,空格隔开,按照单词出现的次数,倒序展示前5名,并同时展示次数
答案:sed ‘s/ /\n/g’ b.txt | awk ‘{print $1}’ | sort |uniq -c| sort -rn | head -5 (sed 命令将空格符换成换行符,再结合awk命令)
sed命令格式:sed[选项][动作]
1、选项:
-n: 使用安静(silent)模式。在一般sed的用法中,所以来自STDIN的数据一般都会被列出来到终端上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
-i: 直接修改读取的文件内容,而不是输出到终端
2、动作:[n1][n2]function
(1)n1,n2:可选项,一般代表[选择进行动作的行数],举例来说,如果我的动作是需要在10到20行之间进行的,则[10,20[动作行为]]
(2)function:
a : 新增行,a的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c : 替换行,c的后面可以接字串,这些子串可以取代n1,n2之间的行
d :删除行,因为是删除,所有d后面通常不接任何东西
i : 插入行,i的后面可以接字串,而这些子串会在新的一行出现(目前的上一行)
p : 打印,即将某个选择的数据印出,通常p会与参数sed -n 一起运行
s :替换,可以直接进行取代的工作,通常这个s的动作可以搭配正规表示法
(3)举行说明
打印符合匹配条件的2-4行 : sed -n ‘2,4p’ test.log
删除2-4行的内容 : sed ‘2,4d’ test.log
在第一行后新增一行: sed ‘1a hello’ test.log
搜索并打印包含hello的行 : sed -n ‘/hello/p’ test.log
替换文本,将aa换成bb: sed -i ‘s/aa/bb/g’ test.log
3、正式场景,统计log文件中统计接口出现次数
awk ‘{print $7}’ access_log.2020-03-28.txt | awk -F ‘?’ ‘{print $1}’ | sort | uniq -c | sort -rn | head - 5
(’{print $7}’ 是log文件中的第7列是接口 ,awk -F ‘?’ 是去掉get接口相同但?id=XX不同,导致多次被统计 )
二、linux高级文本处理命令grep
1、grep可以过滤文件中的数据,比如过滤日志文件: grep “Error” test.log
2、显示行号 :grep -n “Error” test.log
3、显示匹配字符的前后行数据, -B n 前n行 , -A n 后n行, -C n 前n行+后n行
grep -B 2 “XXX” test.log
grep -A 2 “XXX” test.log
grep -C 2 “XXX” test.log
-w:精确匹配
-v: 不包含某些字符串的行
总结三剑客:
awk 适合对于有规律的列数据进行处理
sed 适合于行数据进行处理,包括增删改查
grep 适合对文本数据进行过滤处理
本文介绍了Linux下三种强大的文本处理工具:sed、grep及awk。详细解释了它们的使用方法与应用场景,如sed用于行数据处理,grep擅长文本过滤,awk则适用于列数据操作。
3403

被折叠的 条评论
为什么被折叠?



