Shell编程之文本处理器——grep

本文详细介绍了Linux系统中常用的文本处理命令,包括grep用于过滤文本,sort进行排序,uniq去除重复行,tr进行字符替换和删除,以及cut进行字段截取。这些命令在日常的系统管理和数据分析中非常实用。
摘要由CSDN通过智能技术生成

针对文本内容的操作

针对文本内容进行匹配或者过滤

排序

grep        过滤

针对文本内容进行过滤,也就是查找

-i	忽略大小写;默认的,可加可不加
-n	显示匹配的行号及内容
-c	只显示匹配的行的数量
-v	取反,显示不匹配的行的内容

grep的作用:过滤文本内容,是针对“行”来进行处理

-m    多个匹配的话,可以限定显示几行;后面加空格跟数字,不加数字会报错
-m 1

-o    仅显示匹配到的字符串
-q    静默模式;什么都不输出,匹配但不输出
-A 3	匹配到内容行后,再向下展示3行A=after;匹配到的行也会显示,但不算计数(即共显示4行)
-B 2	匹配到当前行以及当前行的,
-C 3	匹配到当前行以及上下各3行


例:
[root@mysql1 opt]# grep -A 2 "avahi" /etc/passwd
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-e	逻辑或,可以匹配多个条件,满足其一便打印;可以实现多个选项见得逻辑关系,可以跟多个条件
-e 条件1 -e条件2 -e 条件3 ...


-w	匹配整个单词;精确匹配
-E	使用扩展正则表达式;grep -E 等同于egrep都是可以使用扩展正则表达式
-f	根据两个文件的内容进行匹配,匹配两个文件中相同的内容
-r	递归目录,但不处理软连接,硬链接不受影响
-R	递归目录,处理软连接

sort        排序

以行为单位,对文件的内容进行排序,也可以根据不同的数据类型进行排序

格式:
sort 选项 参数
cat 文件名 | sort 选项
常用选项:
-f	忽略大小写,但默认会把大写的字母排在前面;先排数字再排字母
-b	忽略每行前面的空格;会按行号进行排序
-n	按照数字进行排序
-r	反向排序
-u	去重;相同的数据只显示一行
-o	输出文件名,将排序后的结果转存到指定的文件

cat -n test | sort -n -o ky30.txt

uniq        去重的命令 

用于报告或者忽略文件中连续出现的重复行,经常与sort命令结合使用

格式:
uniq 选项 参数
cat 文件名 | uniq 选项

常用选项:
-c	统计连续重复的行的次数,合并重复的行,然后打印;仅打印,不会改变文件原有内容
-u	显示仅出现一次的行,包括不连续的重复行
-d	仅显示连续重复出现的行

tr        

用于对来自标准输入的字符进行替换、压缩和删除

格式:
tr 选项 参数
也可以结合管道符使用

常用选项:
    " "    直接替换
    echo 192.168.220.10 | tr "." " "    替换,将"点"替换成空格

    -c     保留字符集1的字符,字符集1的其他字符用字符集2来替换
    echo abc | tr -c "ab" "t"        替换,将ab以外的其他内容替换成t;默认会多加一个t

    -d     删除指定的字符集

    -s     把重复出现的字符串压缩成一个字符串,也可以替换
    -t     默认就是替换,可写可不写

        tr常用于删除不想要的部分

        \n将多个空行压缩成一个

sort -n test.sh | tr -s "\n"          将多个空行压缩成一个

echo $PATH | tr -s ":" "\n"        将“冒号”替换成“换行”

cut        截取

对字段进行截取和裁剪;与awk相似,可以先截取行再截取列

格式:
cut 选项 参数
cat 文件名 | cut 选项

常用选项:
-d	指定分隔符,默认分隔符为tab键
awk的默认分隔符是空格,多个空格也会算成一个

-f	按字段进行截取,指定要截取的字段;1-3,第1到3列;1,3 第1和第三列
-b	以字节为单位进行截取
-c	以字符为单位进行截取
--complement	删除指定字段

cat /etc/passwd | cut -d ':' -f 1-3    以冒号为分隔符,打印第1到第3列的内容
cat /etc/passwd | cut -d ':' -f 1,3    以冒号为分隔符,打印第1和第3列的内容

cat /etc/passwd | cut -d ':' -f 2 --complement    以冒号为分隔符,删除第2列的内容然后打印
cat /etc/passwd | cut -d ':' -f 1-3 --output-delimiter="@"    将第1到第3列的":"替换成@

split        文件拆分***

将大文件拆分成小文件

-l	指定行数拆分    ;line
-b	指定文件大小拆分    ;block
***
split -b 大小 文件名 拆分后的文件名
split -b 2m 文件A file        将文件A以每2mb为一份进行拆分,并命名为以file开头

split -l 行数 文件名 拆分后的文件名
split -l 20 /etc/passwd pwd    将文件passwd以每20为一个进行拆分,并命名为pwd开头

paste        文件合并***

paste a b 和 cat a b 之间的区别

两者都可以合并文本内容,并且都只是临时展示,不会对文件进行修改

paste是左右合并(不换行),cat是上下合并(换行)

 ***例题:

统计当前主机的连接状态

listen    监听;等待连接,判断谁可以连接
estab     已经建立连接,并且连接处于活动状态

netstat -antp

netstat -antp | grep -v "Foreign" | grep -v "established" | tr -s " " | cut -d " " -f 6 | sort | uniq -c

netstat -antp        打印当前网络状态信息
grep -v "Foreign" 和 grep -v "established"    取反是为了排除这两个不需要的内容
tr -s " "            压缩空格为一个
cut -d " " -f 6      指定空格为分隔符,并打印第6列连接状态的信息
sort                 排序
uniq -c              统计两种状态的数量

ss -antp

ss -antp | grep -v "^State" | cut -d " " -f 1 | sort | uniq -c

统计当前主机的连接数

ss -nt | tr -s " "| cut -d " " -f 4 | sort | uniq -c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值