文本处理工具

1. cat

不适合查看大文件
1、查看文件及行号
[root@localhost teone]# cat -n  one.log 
     1	2 this is a test
     2	3 Are you like awk
     3	This's a test
     4	10 There are orange,apple,mongo
2、显示隐藏符号,如回车符($)
[root@localhost teone]# cat -A one.log 
2 this is a test$
3 Are you like vvv$
This's a test$
10 There are orange,apple,mongo$

3、合并文件(将three.log和 four.log这两个文件内容追加至one.log)
[root@localhost teone]# cat three.log four.log >> one.log 
[root@localhost teone]# cat one.log 
2 this is a test
3 Are you like vvv
This's a test
10 There are orange,apple,mongo
this three
hhhhhhhhhhhh
this four file
vvvvvvvvvvvvv

2.more,less

翻页查看大文件

3.head,tail

head:显示指定文件前若干行的文件内容
tail:显示指定文件结尾若干行的文件内容
1、-n 指定显示开头/结尾几行
[root@localhost teone]# head -n 3 two.log 
hhhh,jjjjj,j
bbbbb,bbbb
nnnnnn,nnnnnn,nnn

2、监听文件新增内容
tail -f

4.grep

1、查找文件中指定字符串的行
[root@localhost teone]# grep bb two.log 
bbbbb,bbbb
bbbsssa,a
bbbbb,bbbb
bbbsssa,a

2、查看行的个数
[root@localhost teone]# grep -c bb two.log 
4

3、查看指定的实时信息
tail -f /opt/test.log | grep -C 10 --color '关键字'

4、使用正则表达式
[root@localhost teone]# grep ^gg two.log 
ggggg

5.当前文件夹下以log结尾的文件中包含bb关键字的行
[root@localhost teone]# grep bb *.log
one.log:BBBDDDBBbbb
two.log:bbbbb,bbbb
two.log:bbbsssa,a
two.log:bbbbb,bbbb
two.log:bbbsssa,a

6.反向查找
[root@localhost t_file]# grep -v cc one.log
"ddd
7.不区分大小写
[root@localhost t_file]# grep -i "cc" *.log
one.log:ccccccccccccccccc
one.log:CCCCCCCC
two.log:cccccc
8.找出以.log结尾的文件,并包含关键字cc的行
[root@localhost t_file]# find -name "*.log"|xargs grep "ccc"
./two.log:cccccc
./one.log:ccccccccccccccccc

9.递归查找目录下文件 -r(范围:该目录及其子目录)
[root@localhost qqc_data]# grep -r  ccccc /qqc_data/t_file/
/qqc_data/t_file/one.log:cc,|cc"ccc44 cccccccccc
/qqc_data/t_file/three.txt:cc 44 ccccccc

5.find

1、查找当前目录及子目录下以.gz结尾的文件
[root@localhost qqc_data]# find -name "*.gz"
./redis-4.0.8.tar.gz
./go1.15.4.linux-amd64.tar.gz
./go/src/crypto/ed25519/testdata/sign.input.gz
./go/src/debug/elf/testdata/hello-world-core.gz
./go/src/encoding/json/testdata/code.json.gz

2.指定文件容量查找(大于1M,以log后缀的文件)
find / -size +1M -name "*.log"

6.awk

1,指定固定的分割符
[root@localhost t_file]# cat one.log 
d"|d d
cc,|cc"ccc cccccccccc
&,&
CCC C|"Csa,sCCC
vv,saa
# BEGIN{FS="分割字符"}:指定分割符,不指定默认以空格分割(awk '{print$1}' one.log)
[root@localhost t_file]# awk 'BEGIN{FS="|"} {print$1}' one.log 
d"
cc,
&,&
CCC C
vv,saa

2,指定多个分隔符
# 先按| 分割,得到的结果再按, 分割
[root@localhost t_file]# awk -F '[| ,]' '{print$1}' one.log 
d"
cc
&
CCC
vv

3.设置变量
[root@localhost t_file]# cat two.log 
22,ddddddddd
ccc,ccc
33,aaaaaaaa
mmmmmmmmmmm

# -v:设置变量,如果前面的结果是数字,会进行运算操作
[root@localhost t_file]# awk -va=1 'BEGIN{FS=","} {print$1,$1+a}' two.log 
22 23
ccc 1
33 34
mmmmmmmmmmm 1

4. -f:指定awk 文件
awk -f cal.awk log.txt

5. 运算符
[root@localhost t_file]# cat three.txt 
kk 2 kk
cvv 3 vvvvv
zz gghj zz
cc 44 ccccccc
5.1.过滤第二列小于10的行
[root@localhost t_file]# awk '$2<10' three.txt 
kk 2 kk
cvv 3 vvvvv
5.2.过滤第二列小于10的行或者等于gghj 的行
[root@localhost t_file]# awk '$2<10 || $2=="gghj"' three.txt 
kk 2 kk
cvv 3 vvvvv
zz gghj zz

6.正则匹配关键字
# cc或者vv 关键字的行
[root@localhost t_file]# awk '$0 ~ /cc/ || /vv/' three.txt 
cvv 3 vvvvv ffs
cc 44 ccccccc
# 每行第4列包含ff的行
[root@localhost t_file]# awk '$4 ~ /ff/ {print $0}' three.txt 
cvv 3 vvvvv ffs
zz gghj zz ssffg
# 所有包含ff的行
[root@localhost t_file]# awk '/ff/' three.txt 
cvv 3 vvvvv ffs
zz gghj zz ssffg
# 取反操作:
[root@localhost t_file]# awk '$0 !~ /cc/' three.txt 
kk 2 kk
cvv 3 vvvvv ffs
zz gghj zz ssffg

# 注:print$0 表示整行

image

应用

1, 通过关键字查找进程号并删除
ps -aux | grep t_file/one.log | grep -v grep | awk '{print$2}' | xargs kill -9

2.指定关键字查看实时日志
tail -f /opt/test.log | grep -C 10 --color '关键字'

3.查看内存
free -m | awk '$0 ~ /Mem/ {print$2}'

4.指定日期查看日志文件
awk -ve="05/Jan/2021:13" '$0 ~ e {print$0}' test.log

5.指定目录中包含某个关键字的所有文件
[root@localhost qqc_data]# grep -r ccccc /qqc_data/t_file/ | awk 'BEGIN{FS=":"} {print$1}'
/qqc_data/t_file/one.log
/qqc_data/t_file/three.txt


# https://www.linuxcool.com/netstat
原文地址:https://www.cnblogs.com/quqinchao/p/14274227.html