压缩指令和正规表示法

一、压缩指令

 关于后缀名

·    *.Z       compress 程序压缩的档案;

·    *.bz2     bzip2 程序压缩的档案;

·    *.gz      gzip 程序压缩的档案;

·    *.tar     tar 程序打包的数据,并没有压缩过;

·    *.tar.gz  tar 程序打包的档案,其中并且经过 gzip 的压缩!

·    *.zip     zip 程序压缩文件

·    *.rar     rar 程序压缩文

这些是目前叫常用的后缀名,虽然在linux中文件的属性和他的后缀名没有绝地的关系,能不能执行要看他的文件属性,但是为了方便我们记忆,适当的文件后缀名是必要的!

1、compress

语法:

[root@lpp ~]# compress [-d] filename

参数说明:

-d :解压缩参数

范例:先将/etc/man.config复制到root下,在将他压缩。

[root@lpp ~]# cp /etc/man.config /root
[root@lpp ~]# compress man.config//压缩man.config 
[root@lpp ~]# compress -d man.config.Z // -d 解压缩这个文件
[root@lpp ~]# uncompress man.config.Z  //解压缩这个文件


所以以后看到.Z文件就应该知道是经过compress命令压缩的文件。注意:当你使用compress没有给出其他参数是,原始文件会被后来的.Z文件取代。

 

2、bzip2,bzcat

语法:

[root@lpp ~]# bzip2 [-dz] filename  <==压缩解压缩指令
[root@lpp ~]# bzcat  filename.bz2  <==读取压缩文件的内容


参数说明:

-d : 解压缩

-z : 压缩

范例:

[root@lpp ~]# bzip2 -z man.config //压缩文件
[root@lpp ~]# bzcat man.config.bz2 //读取压缩文件内容 
[root@lpp ~]# bzip2 -d man.config.bz2 // 解压缩
[root@lpp ~]# bunzip man.config.bz2 // 解压缩 

注意:当你使用bzip,原始文件会被后来的.bz2文件取代。当你要解压一个文件,这个文件名称是.bz,.bz2,.tbz,.tbz2等,均可尝试用bzip解压。


3、gzip,zcat

语法:

[root@lpp ~]# gzip  [-d#] filename  <==压缩解压缩指令
[root@lpp ~]# zcat  filename.gz  <==读取压缩文件的内容


参数说明:

-d : 解压缩参数

-r : 递归处理,将指定目录下的所有文件和子目录一并处理

-# : 压缩等级,1最不好,9最好,6为默认值

范例: 

[root@lpp ~]# gzip man.config  //压缩文件,生成.gz的压缩文件
[root@lpp ~]# zcat man.config.gz //读取压缩文件内容
[root@lpp ~]# gzip -d man.config.gz  // 解压缩 
[root@lpp ~]# gunzip man.config.gz //解压缩 
[root@lpp ~]# gzip -9  man.config //以最大的压缩比例压缩文件 
[root@lpp ~]# gzip -r filename.gz file1 file2 file3 /usr/work/school 
////file1、file2、 file3、以及/usr/work/school目录的内容(假设这个目录存在)压缩起来,然后放入filename.gz文

 

4、tar --重点应用指令

语法:

[root@lpp ~]# tar [-zxcvfpP] filename
[root@lpp ~]# tar -N 'yyyy/mm/dd' /path -zcvf target.tar.gz source

参数说明: 
-z  :是否同时具有 gzip 的属性? 
-x  :解开一个压缩档案的参数指令! 
-t  :查看 tarfile 里面的档案!
-c  :建立一个压缩档案的参数指令 
-v  :压缩的过程中显示档案! 
-f  :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!
-p  :使用原档案的原来属性(属性不会依据使用者而变) 
-P  :可以使用绝对路径 
-N  :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中! 
--exclude FILE:在压缩的过程中,不要将 FILE 打包! 

范例:

[root@lpp home]# tar -cvf lpp.tar ./lpp //将这个./lpp目录打包成一个文件
[root@lpp home]# tar -zcvf lpp.tar.gz ./lpp // 将这个目录打包的同时以gzip压缩
[root@lpp home]# tar -xvf lpp.tar ./lpp //将打包的这个文件解压
[root@lpp home]# tar -zxvf lpp.tar.gz ./lpp  //因为这个是gzip压缩的结果,所以需要加上 -z

[root@lpp home]# tar -N '2011/07/25' -zcvf lpp.tar.gz /home/lpp //在/home/lpp这个目录下,比2011/07/25还要新的文件才会被打包到 lpp.tar.gz中
[root@lpp home]# tar -zcvf host.tar.gz / --exclude /mnt --exclude /proc
//将根目录的所有数据都打包到host.tar.gz文件中,但是/mnt及/proc不打包
[root@lpp ~]# tar -cvf - /home/lpp|tar -xvf -  //将/home/lpp这个目录打包后直接在/root下解包,最好使用绝对路径不容易出问题!


注意:tar是一个多用途的压缩指令,前面提到的conpress与gzip只适合压缩一个文件,但是如果要压缩一个目录,就必须使用tar。tar是用作备份很重要的指令。且注意使用tar命令解压前后的文件不会被覆盖,会产生新的文件。

 

二、正规表示法
 

什么是正规表示法( Regular Expression, 底下简称RE ):
       

简单的说,在Linux的环境下,我们可以透过『 字串以及一些特殊字元的辅助 』来进行文字的比对工作,好来让使用者筛选自己所需要资料。 这些特殊的字元与搭配使用的工具,就构成了正规表示法的主轴啦 ! 举个简单的例子来说,我要找到VBird 或Vbird 这个字样,但是不要其他的字串,如果使用大小写都接受的情况,我就有可能会找到VBIRD 或vbird 或vbIRd 等等的字眼,但是我却只要前两个字串而已啊! 这个时候,我可以使用V[Bb]ird来搜寻呢! 呵呵! 那个中括号[]就是一个很常见的表示法之一啰! 此外,正规表示法搜寻的结果显示当中,由于RE 主要针对『一行』来进行处理,如果是在文书排版的软体当中,则是以『一整段(没有断行)』来进行处理,如果该行有所需要的资料时,则取出来进行处理,如果该行无搜寻的资料,则将该行舍弃,不进行处理与显示!

 1、grep

语法:

[root@lpp ~]#  grep [-acinv] '搜寻字串' filename 

参数说明:

-a :将binary档案以text档案的方式搜寻资料
-c :计算找到'搜寻字串'的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有'搜寻字串'内容的那一行

范例:

[root@lpp ~]# grep root /var/log/secure

将/var/log/secure这个文件中有root那一行显示出来

[root@lpp ~]#  grep -v 'root' /var/log/secure

将/var/log/secure这个文件中没root的那些行显示出来

[root@lpp ~]# grep "*[a-d]*" /var/log/secure

输出含有a-d的行

[root@lpp ~]# grep [AZ]ANPATH /etc/man.config 

[任何一个大写字元]后面接ANPATH的那一行就显示出来! 例如AANPATH, BANPATH.... ZANPATH等等!

• 说明 :
      grep是一个很常见的指令,最重要的功能就是进行字串资料的比对了,需要说明的是『 grep在一个档案中查寻一个字串时,他是以"整行"为单位来资料的撷取的! 』也就是说,假如一个档案内有10 行,其中有两行具有你所搜寻的字串,则将那两行显示在萤幕上,其他的就丢弃了! 而grep 除了可以进行档案的资料搜寻之外,也常常被应用在input/output 的资料处理当中,例如常见的管线命令( pipe ) 就可以常常见到他的踪影! 以上面的例子来看,我们可以发现前两个例子是查寻档案的内容,有没有加上-v 所显示出来的结果是『相反的! 』,而第三个例子则是以pipe 的功能进行资料的处理的喔! 至于最后一个例子比较特殊,使用到中括号[] ,这是什么意思呢?

       在中括号里面『只有一个字元』,而里面的内容就是『字元的范围』啦! 所以呢[AZ]就是指:『A到Z当中的任何一个字元都能被接受但是只有一个字元』的意思 ! 所以,如果我想要所有的数字都接受,那就是[0-9],如果我只要接受1,3,5呢? 就是[135]或者可以用逗号隔开[1,3,5]! 所以啦,那个减号-在中括号当中,代表『一个范围(range) 』的意思啦! 中括号还有很多用途呢! 底下会更详细介绍!

正规表示法的特殊字元(charaters)与egrep指令

通配符 意义
^ 句首字符相符
$ 句尾相同的字符
? 任何一个字符
* 随意几个字符
\ 跳转字符,将特殊字符变为普通自如
[list] 列表中的字符
[range] 列表中范围内的字符

[^list]

反向选择,与[list]相反
[^rang] 方向选择,与[list]相反
\{n\} 与前一个相同字连续n个
\{n,m\} 与前一个相同字连续n-m个

范例:

[root@lpp ~]# grep ^boot /etc/*

搜寻在/etc下 文件中有一行以boot开头的文件

[root@lpp ~]# grep [xyz] /etc/*

搜寻在/etc下文件中含有XYZ三个字符中的任何一个的那一行

2、diff

功能:

Linux中Diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

语法:

[root@lpp ~]# diff [options] file1 file2

该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较

参数说明:

-a:将所有文件当作文本文件来处理。

-b或–ignore-space-change  忽略空格造成的不同。

-B或–ignore-blank-lines  忽略空行造成的不同。

-c:使用纲要输出格式。

-H:利用试探法加速对大文件的搜索。

-I:忽略大小写的变化。

-n –rcs:输出RCS格式。

-N或–new-file  在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-r或–recursive  比较子目录中的文件。

-u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。

范例:

[root@lpp ~]# diff /usr/xu mine

把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。

通常输出由下述形式的行组成:

n1 a n3,n4

n1,n2 d n3

n1,n2 c n3,n4 这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。

在上述形式的每一行的后面跟随受到影响的若干行,以”<”打头的行属于第一个文件,以”>”打头的行属于第二个文件。

diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。

如果file1和file2都是目录,则diff会产生很多信息

diff最常用的功能:

diff有很多功能平时我们不常用到,最常用的功能莫过于生成patch文件了:

diff -urN old/ new/ > mysoft.patch
参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。

然后在需要应用patch的地方使用下述命令即可:

patch -p0 < mysoft.patch

diff的 -y 命令(长格式为 –side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数就相当有用了。如果要改变左右各部分的宽度,可以通过 -W (–width)参数来指定。
–ignore-blank-lines 参数可以不检查空白行。这样DOS格式和Unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。

 


重点回顾
• 正规表示法( Regular Expression ) 的用途主要是用来做为『搜寻』字串之用,还可以用来过滤特殊讯息等用途;
• 由于严谨度的不同,正规表示法之上还有更严谨的延伸正规表示法;
• 正规表示法的处理方式,经常是以『整行』或称为『整段』来进行处理的;
• grep 与egrep 在正规表示法里面是很常见的两支程式,其中, egrep 支援更严谨的正规表示法的语法;
 

 就先到这里,关于awk与sed后续补充。

你可能感兴趣的:(linux)