常见文本处理工具

paste -d"#"f1 f2 横向合并文件,并以#作为分隔符
cut -d ‘%’ -f2,3-5以%分隔符,取第二列和三到五列
cat f1 f2纵向合并文件
tac f1 f2和cat显示内容是相反的
tr -s " " “%”空格压缩为%
tr -s " "仅仅压缩空格
[root@nginx ~]#  ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.186.39.193  netmask 255.255.0.0  broadcast 10.186.255.255
        ether 52:54:00:33:78:f8  txqueuelen 1000  (Ethernet)
        RX packets 8942034  bytes 5666332700 (5.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7219762  bytes 1850180335 (1.7 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@nginx ~]#  ifconfig eth0 |head -n2 |tail -n1
        inet 10.186.39.193  netmask 255.255.0.0  broadcast 10.186.255.255
[root@nginx ~]#  ifconfig eth0 |head -n2 |tail -n1 |tr -s ' ' | cut -d ' '  -f3
10.186.39.193

sort 默认排序
-t 制定分隔符
-u 去重排序
-n 顺序排序(由小到大)
-r 和-n相反
-R 随机排序 (生成随机数,比如抽奖)
-k 指定那一列

[root@nginx ~]# echo {1..50} | tr -s " " "\n" |sort -R |head -n1  #生成随机数
12
[root@nginx ~]# echo {1..50} | tr -s " " "\n" |sort -R |head -n1
46
[root@nginx ~]# cat /var/log/nginx/access.log | cut -d' ' -f1 | sort -u -n   #排序并去重
1.202.69.104
5.8.54.27
23.254.203.250
36.152.17.61
37.59.57.78
43.226.144.199
52.222.3.206
52.77.223.212

uniq
-c 显示重复的次数
-d 仅仅显示重复的行
-u 仅仅显示不曾重复的行

[root@nginx ~]#  cat /var/log/nginx/access.log | cut -d " " -f1 |uniq -c |sort -nr |head -n10   #对一个网站访问前十次的IP排名
    400 119.29.143.122
    252 43.226.144.199
     13 222.128.2.100
     13 1.202.69.104
     12 82.223.29.247
     12 37.59.57.78
     12 188.40.127.8
     12 120.55.164.49
     10 52.222.3.206
      4 59.110.237.76
[root@nginx ~]# sort -t " " -k1  /var/log/nginx/access.log | cut -d " " -f1 |uniq -c |sort -nr |head -n10   #也是对访问前十的IP排序
[root@nginx ~]# sort -t " " -k1  /var/log/nginx/access.log | cut -d " " -f1 |uniq -c |sort -nr |head -n10 |tr -s " " |cut -d " "  -f3  #去掉前面的次数
119.29.143.122
43.226.144.199
222.128.2.100
1.202.69.104
82.223.29.247
52.222.3.206
37.59.57.78
188.40.127.8
120.55.164.49
59.110.237.76
[root@nginx ~]# cat f2 
aa
bb
deklfmef
ferf
er
[root@nginx ~]# cat f1 
aa
bb
ddddd
cc
ggg
[root@nginx ~]#  cat f1 f2 | sort |uniq -d  #找两个文件相同的行
aa
bb
#grep 

grep:
-a 不要忽略二进制数据。
-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b/-B 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-c 计算符合范本样式的列数。
-C<显示列数>或-<显示列数>  除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> 指定字符串作为查找文件内容的范本样式。
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。=egrep
-f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F 将范本样式视为固定字符串的列表。
-i 忽略字符大小写的差别。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。
-q 不显示任何信息,	用于判断返回值。
-R/-r 此参数的效果和指定“-d recurse”参数相同。
-s 不显示错误信息。
-v 反转查找。
-w 只显示全字符(单词)合的列。"a b c " "a-b-c" "a,b,c" 这三种属于三个单词。
-o 只输出文件中匹配到的部分。

-i -v -c -o -q -A -B -C -e -w
[root@nginx ~]# grep $(whoami) /etc/passwd

[root@nginx ~]# grep $USER /etc/passwd

[root@nginx ~]# grep -e root -e nginx /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
nginx:x:995:992:Nginx web server:/var/lib/nginx:/sbin/nologin

[root@nginx ~]# grep -n -A2 root /etc/passwd

[root@nginx ~]# grep -n -B2 root /etc/passwd

[root@nginx ~]# grep -n -C2 root /etc/passwd

[root@tengine mnt]# grep "\(root\)" /etc/passwd
#查看配置文件中的有用信息
cat /etc/my.cnf |tr -s " " |grep -v ^# |grep -v ^$  |grep -v "#"
#以若干个空格开头后跟linux16的行
 grep "^[[:space:]]\+linux16" /boot/grub2/grub.cfg


[root@nginx ~]# nmap -v -sP 119.29.143.0/24.  #探测存活主机
[root@nginx ~]# nmap -v -A 119.29.143.254.    #探测服务
[root@nginx ~]# nmap -v -sP 119.29.143.0/24 | grep -B1 "up" |cut -d" "  -f5 |grep 119   #探测某个网断存活的主机
119.29.143.11
119.29.143.12
119.29.143.13
119.29.143.14
119.29.143.15
119.29.143.16
119.29.143.17
root@JD:~# grep `whoami`  /etc/passwd #要使用反引号,不用使用引号或者双引号(匹配不到)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@aliyun data]# ifconfig eth0 |grep -o "[0-9.]\{7,\}"  #查看网卡IP地址
172.16.31.64
255.255.192.0
172.16.63.255
380127248
323691159
[root@aliyun data]# grep -v ^[[:space:]]\*$ y  #过滤掉空行,^[[:space:]]$表示空白行
HHHHH
[root@aliyun data]# cat y

HHHHH
[root@aliyun data]# grep -w root /etc/passwd  #包含root这个单词的行(a-b-c,a b c,(a,b,c)这都算三个单词)
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@aliyun data]# grep "\<root" /etc/passwd  #root这个单词开头的行,单词的最左侧
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

rooter:x:1002:1002::/home/rooter:/bin/bash
[root@aliyun data]# grep ^root /etc/passwd  #root这个匹配模式的开头的行,匹配模式的最左侧
root:x:0:0:root:/root:/bin/bash
rooter:x:1002:1002::/home/rooter:/bin/bash

[root@aliyun data]# grep "root\>" /etc/passwd  #root着单词结尾的行,单词的最右侧
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
adminroot:x:1003:1003::/home/adminroot:/bin/bash
[root@aliyun data]# echo hhhhaa  |grep aa$  #aa为匹配模式结尾的行
hhhhaa

[root@aliyun data]# grep "\<root\>"  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@aliyun data]# grep "\broot\b"  /etc/passwd # \<也可用\b来表示,\>也可以用\b
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@aliyun data]# grep "^\(.*\):.*/\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[root@aliyun data]# grep "^halt.*halt$" /etc/passwd
halt:x:7:0:halt:/sbin:/sbin/halt

[root@aliyun data]# grep "\(\<.*\):.*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt


[root@aliyun data]# echo mamamamaXXXXXXXgegegege  |grep "\(ma\)\{4\}"
mamamamaXXXXXXXgegegege
[root@aliyun data]# echo mamamamaXXXXXXXgegegege  |grep "\(ma\)\{4\}.*\(ge\)\{4\}"
mamamamaXXXXXXXgegegege
[root@aliyun data]# echo mamamamaXXXXXXXmamamama  |grep "\(ma\)\{4\}.*\1" #\1表示对\(ma\)\{4\}>>mamamama这个整体
mamamamaXXXXXXXmamamama
[root@aliyun data]# echo mamamamaXXXXXXXgegegege  |grep "\(ma\)\+"
mamamamaXXXXXXXgegegege


[root@aliyun data]# grep "^a\|^b.*" /etc/passwd #表示a开头的或者b开头后面跟随意字符
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
admin:x:1000:1000::/home/admin:/bin/bash
adminroot:x:1003:1003::/home/adminroot:/bin/bash
ahalt:x:1004:1004::/home/ahalt:/bin/bash

[root@aliyun data]# grep "\(^a\|^b\).*" /etc/passwd #表示a开头后跟任意字符或者b开头后跟任意字符
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
admin:x:1000:1000::/home/admin:/bin/bash
adminroot:x:1003:1003::/home/adminroot:/bin/bash
ahalt:x:1004:1004::/home/ahalt:/bin/bash

[root@aliyun data]# echo bbb |grep "a\|b"
bbb
[root@aliyun data]# echo aaa |grep "a\|b"
aaa
[root@aliyun data]# echo bxy |grep "a\|bxy"
bxy
[root@aliyun data]# echo bxy |grep "\(a\|b\)xy"
bxy

[root@aliyun data]# grep -o "[0-9]\+" /etc/redhat-release |head -n1  #取redhatOS大的系统版本号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值