十一、文件/目录-搜索文件内容

king's blog
在linux下,会经常对文件内容进行查询,抽取,排序等,尤其是对规则文件进行抽取,比如csv文件,熟练掌握后会事半功倍,本节我们来了解下该方面的内容。
主要内容如下:
一、文件内容-查看(cat、tac、more、od)
二、文件内容-抽取(cut、awk)
三、文件内容-查询(grep)
四、文件内容-排序(sort)
五、文件内容-去重(uniq)
六、文件内容-统计(wc)

一、文件内容-查看(cat、tac、more、od)

linux下查看文件内容的命令很多,常用的如下:

1
2
3
4
5
6
7
8
cat:从第一行开始显示文件全部内容
tac:从最后一行开始显示文件内容
nl:显示文件全部内容,同时显示行号
more:一页一页的显示文件内容
less:与more相似,但可以往前翻页
head:显示文件前几行
tail:显示文件后几行
od:以二进制的方式读取文件内容

二、文件内容-抽取(cut、awk)

对规范性文件进行部分文件抽取,比如只想截取文件的第2列和第5列,可用cut和awk命令,下面对cut做介绍,awk内容较多,在下一章节详细介绍

命令格式:

cut -d’分割字符’ -f fields

参数解释:

-d:后面跟分割字符,与-f参数一起使用
-f:后面跟数字,比如2;3,9;3-5;3-等,截取第几列的意思
-c:后面跟数字,以字符(characters)为单位取出固定字符区间

例子-1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
weblogic@ETS157:/opt/project> head -5 /etc/passwd
at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
bin:x:1:1:bin:/bin:/bin/bash
daemon:x:2:2:Daemon:/sbin:/bin/bash
ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
games:x:12:100:Games account:/var/games:/bin/bash

#获取第2列和第4列
weblogic@ETS157:/opt/project> head -5 /etc/passwd |cut -d':' -f2,4
x:25
x:1
x:2
x:49
x:100

#获取第2~4列,也就是获取2,3,4列
weblogic@ETS157:/opt/project> head -5 /etc/passwd |cut -d':' -f2-4
x:25:25
x:1:1
x:2:2
x:40:49
x:12:100

#获取第2列及之后所有的列
<code lang="bash">
weblogic@ETS157:/opt/project> head -5 /etc/passwd |cut -d':' -f2-
x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
x:1:1:bin:/bin:/bin/bash
x:2:2:Daemon:/sbin:/bin/bash
x:40:49:FTP account:/srv/ftp:/bin/bash
x:12:100:Games account:/var/games:/bin/bash
例子-2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
weblogic@ETS157:/opt/project> export | head -3
declare -x COLORTERM="1"
declare -x CPU="x86_64"
declare -x CSHEDIT="emacs"

#获取第一个字符
weblogic@ETS157:/opt/project> export | head -3 | cut -c 1
d
d
d

#获取第12个字符(含)之后所有的字符
weblogic@ETS157:/opt/project> export | head -3 | cut -c 12-
COLORTERM="1"
CPU="x86_64"
CSHEDIT="emacs"

三、文件内容-查询(grep)

grep是针对文件内容按行进行搜索,即搜索结果会将喊搜索关键词所在的行显示出来

命令格式:

grep [-acinv] [–color=auto] ‘搜索字符串’ filename

常用参数:

-a :将binary文件以text文件格式搜寻数据
-c :计算’搜索字符串’的次数
-i :搜索时忽略字符的大小写
-n :搜索结果输出行号
-v :反向选择,即显示出没有’搜索字符串’的行
-B :显示搜索关键词所在行前多少行,Before的缩写
-A :显示搜索关键词所在行后多少行,After的缩写
–color=auto :可以将搜索结果中的搜索关键字显示颜色

例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#1.搜索关键词'root'
weblogic@ETS157:/opt/project> grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash

#2.搜索关键词'root',且不区分大小写
weblogic@ETS157:/opt/project> grep -i 'ROot' /etc/passwd
root:x:0:0:root:/root:/bin/bash

#3.搜索关键词'root',且区分大小写,同时显示所在的行号
weblogic@ETS157:/opt/project> grep -n -i 'ROot' /etc/passwd
20:root:x:0:0:root:/root:/bin/bash

#4.搜索关键词'root',显示一共搜索到多少行
weblogic@ETS157:/opt/project> grep -c -i 'ROot' /etc/passwd
1

#5.搜索关键词'root',且区分大小写,并显示搜索关键词前2行和后3行
weblogic@ETS157:/opt/project> grep -B 2 -A 3 -i 'ROot' /etc/passwd
pulse:x:105:110:PulseAudio daemon:/var/lib/pulseaudio:/bin/false
puppet:x:103:106:Puppet daemon:/var/lib/puppet:/bin/false
root:x:0:0:root:/root:/bin/bash
sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false
suse-ncc:x:106:112:Novell Customer Center User:/var/lib/YaST2/suse-ncc-fakehome:/bin/bash
uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash

四、文件内容-排序(sort)

linux下对文件内容进行排序,可用sort命令,该命令默认是按字符形态进行排序。

命令格式:

sort [-bfnMrutk] [file or stdin]

参数解释:

-b:忽略最前面的空格符部分
-f:忽略大小写
-M:按月份进行排序
-n:按数字进行排序
-r:反向排序
-u:=uniq,相同的行,进行去重
-t:分隔符,系统预设是用tab键来分隔
-k:以某列的filed来排序

例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#1.sort,默认按首字母进行升序排列
weblogic@ETS157:/opt/project> sort sort_test.log
king:x:1000:100:king:/home/king:/bin/bash
oracle:x:1002:1002::/opt/oracle:/bin/bash
tester:x:1003:1003::/tester:/bin/bash
weblogic:x:1006:1000::/weblogic:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false

#2.按首字母进行倒序排列
weblogic@ETS157:/opt/project>
weblogic@ETS157:/opt/project> sort -r sort_test.log
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
weblogic:x:1006:1000::/weblogic:/bin/bash
tester:x:1003:1003::/tester:/bin/bash
oracle:x:1002:1002::/opt/oracle:/bin/bash
king:x:1000:100:king:/home/king:/bin/bash

#3.按第3列字段(1000,1002,1003,1006,30),按字符类型进行升序排列
weblogic@ETS157:/opt/project> cat sort_test.log | sort -t':' -k 3
king:x:1000:100:king:/home/king:/bin/bash
oracle:x:1002:1002::/opt/oracle:/bin/bash
tester:x:1003:1003::/tester:/bin/bash
weblogic:x:1006:1000::/weblogic:/bin/bash
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false

#4.按第3列字段(1000,1002,1003,1006,30),按数字类型进行升序排列
weblogic@ETS157:/opt/project> cat sort_test.log | sort -t':' -k 3 -n
wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false
king:x:1000:100:king:/home/king:/bin/bash
oracle:x:1002:1002::/opt/oracle:/bin/bash
tester:x:1003:1003::/tester:/bin/bash
weblogic:x:1006:1000::/weblogic:/bin/bash

五、文件内容-去重(uniq)

如果文件内容某几行一样,进行去重,可用uniq。但去重前需要先排序,方可达到效果

命令格式:

uniq [-ic]

参数解释:

-i:忽略大小写
-c:计数

例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#uniq_test文件内容
weblogic@ETS157:/opt/project> cat uniq_test
abc
efg
abc
efg
ABc
EFg
#1.去重,并计数
weblogic@ETS157:/opt/project> cat uniq_test | sort | uniq -c
      2 abc
      1 ABc
      2 efg
      1 EFg

#2.忽略大小写去重,并计数
weblogic@ETS157:/opt/project> cat uniq_test | sort | uniq -c -i
      3 abc
      3 efg

六、文件内容-统计(wc)

如果想对文件内容进行统计,比如统计有多少行,多少个字符,可用wc命令。

命令格式:

wc [-lwm]

参数解释:

-l:按行进行统计
-w:按英文单词进行统计
-m:按字符进行统计

例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#wc_test.log文件内容
weblogic@ETS157:/opt/project> cat wc_test.log
word hello yes
no
#1.显示有多少行
weblogic@ETS157:/opt/project> cat wc_test.log |wc -l
2

#2.显示有多少个单词
weblogic@ETS157:/opt/project> cat wc_test.log |wc -w
4

#3.显示多少个字符
weblogic@ETS157:/opt/project> cat wc_test.log |wc -m
18

#4.一起显示,分别代表行,单词数,字符数
weblogic@ETS157:/opt/project> cat wc_test.log | wc
      2       4      18
Tags:
文 / 甲乙丙丁
LEAVE A REPLY

loading