Linux初见“wc命令”,“grep命令”,“zip命令”,“tar命令”

Posted 陌上花开,静待绽放!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux初见“wc命令”,“grep命令”,“zip命令”,“tar命令”相关的知识,希望对你有一定的参考价值。

文章目录

1.wc命令

统计文件内容:统计文件中的单词数量(word count)等信息。

wc命令格式:wc [选项]…目标文件

常用命令选项:

-l:统计行数

-w:统计单词个数

-c:统计字节数

注:不带任何选项的wc命令,默认同时使用-lwc三个选项.

wc -l命令

[root@clr /usr]# cat 2.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@clr /usr]# wc -l 2.txt  #统计2.txt这个文件中的行数
20 2.txt
[root@clr /usr]# cat 2.txt |wc -l  #利用管道符查看并统计指定文件的行数,只显示行数,不显示文件名
20

wc -w命令

[root@clr /usr]# cat 3.txt
123      456    789
[root@clr /usr]# wc -w 3.txt   #统计3.txt这个文件中的单词数
3 3.txt

wc -c命令

[root@clr /usr]# wc -c 3.txt  #统计指定文件中单词的数量
12 3.txt
[root@clr /usr]# cat 3.txt   #行首和文档结尾处\\n结束符,也算一个字节数
123
4455ffd

wc命令不加任何选项,默认同时显示-lwc三个选项的功能;

[root@clr /usr]# cat 3.txt | wc  #wc结合管道符一起使用,不显示文件名,依次表示2行内容,2个单词,12个字节数
      2       2      12

1.1 wc命令总结

  • wc -l:显示总行数,包括空行占用的行数也计入在内;

  • wc -w:按照空格、tab或换行进行统计单词数

  • wc -c:按照空格、tab或空行统计字节数(空行、换行符以及结尾符都算作是一个单独的字节);

2.grep命令

在文件中查找并显示包含指定字符串的行

grep命令格式:grep [选项]…查找条件 目标文件

常用命令选项:

-i、-v、-n、-c、-e

查找条件设置:

  • 要查找的字符串以双引号括起来

  • “^…” 表示以…开头,”…$”表示以…结尾

  • “^$”表示空行

grep命令

grep -i命令

[root@clr ~]# grep -i system anaconda-ks.cfg   #查询指定文件中所有含有system的行,并且不区分大小写
# System authorization information
# System language
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
@network-file-system-client

[root@clr ~]# grep "^#" anaconda-ks.cfg   #查找指定文件中,所有以#号开头的行,并显示出来
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
# Keyboard layouts
# System language
# Network information
# Root password
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
# Partition clearing information
# Disk partitioning information

[root@clr ~]# grep "[0-9]$" anaconda-ks.cfg  #查找并显示指定文件中,以数字结尾的行
auth --enableshadow --passalgo=sha512
lang zh_CN.UTF-8
rootpw --iscrypted $6$rn9yK8kuso3pcHaI$mi0mdf/UQf9p2PdB/zkG1Zmyh7DtvL2Ckgr1aFjTJP1tFPKwRLaKUzUxLtKvR2b995g4JqOcTuWd6EF/ad4xa0
part / --fstype="xfs" --ondisk=sda --size=37926
part swap --fstype="swap" --ondisk=sda --size=3969
@x11

grep -v命令

[root@clr ~]# grep -v "^#" anaconda-ks.cfg #反向查询并显示所有不以#号开头的行(-v方向查询并显示后面参数未匹配到的内容)
auth --enableshadow --passalgo=sha512
cdrom
graphical
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=cn --xlayouts='cn'
lang zh_CN.UTF-8

network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network  --hostname=localhost.localdomain

rootpw --iscrypted $6$rn9yK8kuso3pcHaI$mi0mdf/UQf9p2PdB/zkG1Zmyh7DtvL2Ckgr1aFjTJP1tFPKw
[root@clr ~]# cat abc.txt
1
2
3
4




5
6
7
8
9



10

[root@clr ~]# grep -v "^$" abc.txt #查询并显示不是空行的行(反向匹配)
1
2
3
4
5
6
7
8
9
10

grep -c命令

[root@clr ~]# grep "^#" anaconda-ks.cfg   #查询并显示所有以#号开头的行
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
# Keyboard layouts
# System language
# Network information
# Root password
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
# Partition clearing information
# Disk partitioning information

[root@clr ~]# grep "^#" anaconda-ks.cfg | wc -l  #统计以#号开头的行数
15

[root@clr ~]# grep -c "^#" anaconda-ks.cfg   #统计以#号开头匹配的行数
15

[root@clr ~]# grep "cn" anaconda-ks.cfg #统计指定文件中含有cn字符串的行数
keyboard --vckeymap=cn --xlayouts='cn'

[root@clr ~]# grep -c "cn" anaconda-ks.cfg  #统计匹配指定文件中含有cn字符串的行数
1

grep -o命令

[root@clr ~]# grep "cn" anaconda-ks.cfg #查询并显示指定文件中含有cn的行数
keyboard --vckeymap=cn --xlayouts='cn'
[root@clr ~]# grep -o "cn" anaconda-ks.cfg #统计指定文件中匹配到的指定字符串(cn)的次数
cn
cn

[root@clr ~]# grep -o "cn" anaconda-ks.cfg | wc -l  #统计指定文件中匹配到的指定字符串(cn)的次数,并将次数统计出来
2

grep命令选项的混合使用;

[root@clr ~]# grep "no" anaconda-ks.cfg  #查询并显示指定文件中含有no字符串的行
ignoredisk --only-use=sda
network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
clearpart --none --initlabel
@^gnome-desktop-environment
@gnome-desktop
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty

[root@clr ~]# grep -c "no" anaconda-ks.cfg   #统计指定文件中,含有no字符串的行数
8

[root@clr ~]# grep -o  "no" anaconda-ks.cfg   #统计并显示指定文件中,匹配到no字符串的次数
no
no
no
no
no
no
no
no
no
no
no
no
no
[root@clr ~]# grep -o  "no" anaconda-ks.cfg | wc -l #统计并显示指定文件中,匹配到no字符串的次数,并统计显示次数
13

grep -n命令

[root@clr ~]# grep -n  "no" anaconda-ks.cfg   #查询并显示指定文件中含有no字符串的行,并将该行在原文件中的行数显示出来
10:ignoredisk --only-use=sda
17:network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
32:clearpart --none --initlabel
38:@^gnome-desktop-environment
46:@gnome-desktop
66:pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
67:pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
68:pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty

grep -e命令

[root@clr ~]# grep -e "^#" -e "^@" anaconda-ks.cfg #查询并显示指定文件中以#号开头,或者以@开头的内容(-e多条件查询,和其他选项一起使用时,选项-e放在最后)(实现或的作用)
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
# Keyboard layouts
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
[root@clr ~]# grep -e "^#" -e "^@" anaconda-ks.cfg | grep "on" #先查询以#开头或者以@开头的行,然后将查询后的内容作为参数传递给管道符,查询并显示其中含有on字符串的行(实现且的作用)
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Run the Setup Agent on first boot
# Network information
# System timezone
# X Window System configuration information
# System bootloader configuration
# Partition clearing information
# Disk partitioning information
@^gnome-desktop-environment
@fonts

查询并显示指定文件中:不区分大小写,含有system字符串,并且以数字结尾的行;

[root@clr ~]# cat anaconda-ks.cfg | grep -ie "system" -e "[0-9]$" #查询并显示指定文件中:不区分大小写,含有system字符串,并且以数字结尾的行;
# System authorization information
auth --enableshadow --passalgo=sha512
# System language
lang zh_CN.UTF-8
rootpw --iscrypted $6$rn9yK8kuso3pcHaI$mi0mdf/UQf9p2PdB/zkG1Zmyh7DtvL2Ckgr1aFjTJP1tFPKwRLaKUzUxLtKvR2b995g4JqOcTuWd6EF/ad4xa0
# System services
# System timezone
# X Window System configuration information
# System bootloader configuration
part / --fstype="xfs" --ondisk=sda --size=37926
part swap --fstype="swap" --ondisk=sda --size=3969
@network-file-system-client
@x11

grep -E命令

[root@clr ~]# grep "^#|^@" anaconda-ks.cfg   #正则表达式在grep命令中起不到作用
[root@clr ~]# grep -E  "^#|^@" anaconda-ks.cfg #查询并显示指定文件中以#号开头,或者以@开头的行
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
@network-file-system-client
@networkmanager-submodules
@print-client
@x11

[root@clr ~]# egrep "^#|^@" anaconda-ks.cfg  #查询并显示指定文件中以#号开头,或者以@开头的行,效果等同于grep -E
#version=DEVEL
# System authorization information
# Use CDROM installation media
# Use graphical install
# Run the Setup Agent on first boot
@network-file-system-client
@networkmanager-submodules
@print-client
@x11

grep -A命令

[root@clr ~]# cat anaconda-ks.cfg | grep -in "system timezone"  #查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号
24:# System timezone

[root@clr ~]# cat anaconda-ks.cfg | grep -A 5  -in "system timezone" #查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号后面的5行内容,一并显示出来
24:# System timezone
25-timezone Asia/Shanghai --isUtc
26-user --name=cCLR --password=$6$gy7MYQ5UGcLxJrGX$GgqRkJhqVMt2uvInbArGKjqkYdYtw2GJhqA/Y5mHly6eqzQUiIDjw8q/2t9K42l1TOvW0hRI1QoK/R3V3hJUo0 --iscrypted --gecos="CLR"
27-# X Window System configuration information
28-xconfig  --startxonboot
29-# System bootloader configuration

grep -B命令

[root@clr ~]# cat anaconda-ks.cfg | grep -in "system timezone"  #查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号
24:# System timezone

[root@clr ~]# cat anaconda-ks.cfg | grep -B 5  -in "system timezone"#查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号前面的5行内容,一并显示出来
19-
20-# Root password
21-rootpw --iscrypted $6$rn9yK8kuso3pcHaI$mi0mdf/UQf9p2PdB/zkG1Zmyh7DtvL2Ckgr1aFjTJP1tFPKwRLaKUzUxLtKvR2b995g4JqOcTuWd6EF/ad4xa0
22-# System services
23-services --enabled="chronyd"
24:# System timezone

grep -C命令

[root@clr ~]# cat anaconda-ks.cfg | grep -in "system timezone"  #查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号
24:# System timezone

[root@clr ~]# cat anaconda-ks.cfg | grep -C 5  -in "system timezone"#查看指定文件中含有"system timezone" 字符串,不区分大小写,并且显示出字符串所在原文件中的行号,以及所在行号的前后各5行的内容,一并显示出来
19-
20-# Root password
21-rootpw --iscrypted $6$rn9yK8kuso3pcHaI$mi0mdf/UQf9p2PdB/zkG1Zmyh7DtvL2Ckgr1aFjTJP1tFPKwRLaKUzUxLtKvR2b995g4JqOcTuWd6EF/ad4xa0
22-# System services
23-services --enabled="chronyd"
24:# System timezone
25-timezone Asia/Shanghai --isUtc
26-user --name=cCLR --password=$6$gy7MYQ5UGcLxJrGX$GgqRkJhqVMt2uvInbArGKjqkYdYtw2GJhqA/Y5mHly6eqzQUiIDjw8q/2t9K42l1TOvW0hRI1QoK/R3V3hJUo0 --iscrypted --gecos="CLR"
27-# X Window System configuration information
28-xconfig  --startxonboot
29-# System bootloader configuration

grep -l命令

2.1 grep命令总结

  • -i:直找时不区分大小写

  • -v:显示不包含匹配条件的所有行(反向查询,反向匹配)

  • -c:只输出匹配到的总行数(而不是匹配到的次数)

  • -n:显示匹配行及行号

  • -e:可实现多个查找条件的匹配,逻辑or关系(实现或的关系)

  • -E:支持使用扩展正则表达式,相当于使用egrep命令

  • -o:精确匹配,统计并显示统计匹配到的次数,即”仅匹配”之意。

  • -A n:显示匹配行和它后面的n行

  • -B n:显示匹配行和它前面的n行

  • -C n:显示匹配行和它前后的各n行

  • -l:列出文件内容符合指定样式的文件

  • -w:只显示满足完整目标单词所在的行

注意:一般通配符用来匹配文件名,正则表达式匹配文件内容。

3.gzip、bzip2命令

制作压缩文件、解开压缩文件

备注:压缩比【1-9】,压缩比为1,表示压缩比最小,但压缩速度最快;压缩比为9,表示压缩比最大,但压缩速度最慢,默认值为6,此时压缩最平衡。

常用命令选项:

-9、-d

[root@clr ~]# gzip -9 456.txt  #压缩456.txt文件
[root@clr ~]# ls    #可以看到只有压缩文件,没有原文件
123.txt    456.txt.gz  abc.txt          initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456      anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat     gzy              公共                  图片  音乐
[root@clr ~]# gzip -d 456.txt.gz  #解压缩
[root@clr ~]# ls   #可以看到只有原文件,没有压缩文件
123.txt    456.txt  abc.txt          initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456   anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat  gzy              公共                  图片  音乐
[root@clr ~]# bzip2 -9 456.txt   #bzip2方式压缩
[root@clr ~]# ls
123.txt    456.txt.bz2  abc.txt          initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456       anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat      gzy              公共                  图片  音乐
[root@clr ~]# bzip2 -d 456.txt.bz2   #解压缩
[root@clr ~]# ls
123.txt    456.txt  abc.txt          initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456   anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat  gzy              公共                  图片  音乐

注意:无论是gzip方式还是bzip2方式,原文件与压缩文件只能存在其一,原文件存在,压缩文件就不在;压缩文件存在,源文件就不在。

3.1 gunzip、bunzip2命令

gunzip命令 等价于 gzip -d命令

  • bzip2和bunzip2命令的用法与gzip、gunzip命令基本相同。
[root@clr ~]# gzip 456.txt
[root@clr ~]# bzip2 abc.txt
[root@clr ~]# ls
123.txt    456.txt.gz  abc.txt.bz2      initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456      anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat     gzy              公共                  图片  音乐
[root@clr ~]# gunzip 456.txt.gz  #gunzip解压缩.gz类型的压缩文件
[root@clr ~]# bunzip2 abc.txt.bz2   #bunzip2解压缩.bz2类型的文件
[root@clr ~]# ls
123.txt    456.txt  abc.txt          initial-setup-ks.cfg  模板  文档  桌面
2.txt.bz2  abc456   anaconda-ks.cfg  lyg11.txt             视频  下载
3344.txt   abc.tat  gzy              公共                  图片  音乐

4.tar命令

制作归档文件、释放归档文件

tar [选项]…归档文件名 原文件或目录

tar [选项]…归档文件名 -C 目标目录

常用命令选项

●-c、-x、-v、-f、-p、-t、-C、-z、-j

注意:解压缩时,可以不用加是何种类型方式解压缩系统会自动识别,但是压缩时,必须要说明是何种类型方式压缩。

tar -czvf命令

[root@clr ~]# tar -czvf clr.tar.gz *.txt  #将所有以.txt结尾的文件全都压缩到一起,并重命名为clr.tar.gz
123.txt/
123.txt/ly.txt
3344.txt
456.txt
abc.txt
lyg11.txt

[root@clr ~]# ls  #可以看到原文件与压缩文件依然都存在
123.txt    456.txt  abc.txt          gzy                   公共  图片  音乐
2.txt.bz2  abc456   anaconda-ks.cfg  initial-setup-ks.cfg  模板  文档  桌面
3344.txt   abc.tat  clr.tar.gz       lyg11.txt             视频  下载

tar -tf命令

[root@clr ~]# tar -tf clr.tar.gz  #查看压缩包内都有那些文件
123.txt/
123.txt/ly.txt
3344.txt
456.txt
abc.txt
lyg11.txt
[root@clr ~]# tar cjf root.tar.bz2 *  #以.bz2方式压缩,将所有文件以及目录压缩到一起,并重命名为root.tar.bz2
[root@clr ~]# ls   #可以看到此时原文件和压缩文件都存在
123.txt    456.txt  abc.txt          gzy                   root.tar.bz2  视频  下载
2.txt.bz2  abc456   anaconda-ks.cfg  initial-setup-ks.cfg  公共          图片  音乐
3344.txt   abc.tat  clr.tar.gz       lyg11.txt             模板          文档  桌面
[root@clr ~]# tar tf root.tar.bz2   #查看压缩包内的目录以及文件
123.txt/ly.txt
2.txt.bz2
3344.txt
456.txt
abc456
abc.tat
abc.txt
anaconda-ks.cfg
clr.tar.gz
gzy/
gzy/11/
gzy/11/22/
gzy/11/22/33/
gzy/11/22/33/44/
gzy/test1.txt
gzy/1.txt
gzy/2.txt
gzy/3.txt
gzy/4.txt
gzy/5.txt
gzy/6.txt
gzy/a/
gzy/b/
gzy/c/
gzy/file10.txt
gzy/file11.txt
gzy/file12.txt
gzy/file13.txt
gzy/file14.txt
gzy/file15.txt
gzy/file16.txt
gzy/file17.txt
gzy/file18.txt
gzy/file19.txt
gzy/file20.txt
initial-setup-ks.cfg
lyg11.txt
公共/
模板/
视频/
图片/
文档/
下载/
音乐/
桌面/

tar -C命令

[root@clr ~]# mv clr.tar.gz root.tar.bz2 /opt/ #将两个指定的压缩文件移动到/opt/目录下
[root@clr ~]# cd /opt/
[root@clr /opt]# ls
1.txt  3.txt.bak  clr  clr_bak  clr.tar.gz  file1,txt  file2,txt  root.tar.bz2
[root@clr /opt]# mkdir root   #创建root目录
[root@clr /opt]# tar xf root.tar.bz2 -C root  #将root.tar.bz2压缩文件解压缩,并解压到root目录中
[root@clr /opt]# cd root/
[root@clr /opt/root]# ls  #可以查看到指定压缩文件,已经解压缩
123.txt    456.txt  abc.txt          gzy                   公共  图片  音乐
2.txt.bz2  abc456   anaconda-ks.cfg  initial-setup-ks.cfg  模板  文档  桌面
3344.txt   abc.tat  clr.tar.gz       lyg11.txt             视频  下载

4.1 zip命令

[root@clr /opt]# ls
1.txt  3.txt.bak  clr  clr_bak  clr.tar.gz  file1,txt  file2,txt  root  root.tar.bz2
[root@clr /opt]# zip test.zip 1.txt file1,txt  #压缩1.txt和file1,txt,并重命名为root.tar.bz2
	dding: 1.txt (deflated 27%)
  adding: file1,txt/ (stored 0%)
[root@clr /opt]# ls   #可以看到原文件和压缩文件都存在
1.txt  3.txt.bak  clr  clr_bak  clr.tar.gz  file1,txt  file2,txt  root  root.tar.bz2  test.zip
[root@clr /opt]# mv test.zip /mnt  #将压缩文件移动到/mnt目录下
[root@clr /opt]# cd /mnt
[root@clr /mnt]# ls
test.zip
[root@clr /mnt]# unzip test.zip  #解压缩
Archive:  test.zip
  inflating: 1.txt                   
   creating: file1,txt/
[root@clr /mnt]# ls
1.txt  file1,txt  test.zip

unzip -d命令

[root@clr /mnt]# unzip test.zip -d /tmp #将test.zip压缩文件解压到/tmp目录中
Archive:  test.zip
  inflating: /tmp/1.txt              
   creating: /tmp/file1,txt/
[root@clr /mnt]# cd /tmp
[root@clr /tmp]# ls  #压缩文件都原文件都存在
1.txt
anaconda.log
file1,txt
hsperfdata_root
ifcfg.log

以上是关于Linux初见“wc命令”,“grep命令”,“zip命令”,“tar命令”的主要内容,如果未能解决你的问题,请参考以下文章

每天学点Linux命令之grep 和 wc命令 ---(6/25)

Linux中统计,检索和过滤文件内容的命令以及压缩归档命令(wc,grep,gzip,bzip2,

Linux操作命令

Linux目录与文件操作(总结)

Linux 命令执行顺序控制与管道

Linux split paste wc 命令