现在的位置: 首页 > 综合 > 正文

Linux新手生存笔记[6]——重点命令3-grep&sort&find&uniq

2013年02月11日 ⁄ 综合 ⁄ 共 4215字 ⁄ 字号 评论关闭

回到全局目录

--------------------------------------------

目录
命令:grep 1
命令:sort 4
命令:find 6
命令:uniq 8

命令:grep

Grep General Regular Expression Parser

global search regular expression(RE) and print out the line

全面搜索正则表达式并把行打印出来,是一种强大的文本搜索工具,它使用正则表达式搜索文本,并把匹配的行打印出来。

grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。

资料:man grep

 

功能:

使用正则表达式搜索文本并打印匹配行

 

格式:

grep [options] PATTERN [Files]

注:输入字符串作为参数,最好双引号括起 
“mystr”[
一以防被误解为shell命令,二可以用来查找多个单词组成的字符串]

在调用变量时,也使用双引号括起 
“$MYSTR”

使用正则[匹配模式]是,应使用单引号括起 
‘49[32]’

 

选项

-c

只输出匹配的行数,而不输出匹配的行

-i

不区分大小写

-h

查询多个文件时不显示文件名【默认是
文件名:符合的记录行】

-l

查询多个文件时,只输出包含匹配字符的文件名

-n

显示匹配行及行号

-s

不显示不存在或无匹配文本的错误信息

-v

显示不包含匹配文本的所有行

-o

仅显示匹配的部分

-r

递归选项。指示GNUgrepegrep检查做为参数的目录下的文件,然后递归的检查该目录下所有子目录下的文件

-E

启用扩展表达式,可使用扩展元字符 egrep

 +

  匹配一个或多个先前的字符。如:'[a-z]+able',匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

 ?

匹配零个或1个先前的字符。如:'gr?p'匹配gr后跟一个或没有字符,然后是p的行。

  *

    匹配0个或多个

 a|b|c

  匹配abc。如:grep|sed匹配grepsed

 ()

  分组符号,如:love(able|rs)ov+匹配loveablelovers,匹配一个或多个ov

 x,x{m,},x{m,n}

作用同x\{m\},x\{m,\},x\{m,n\}

  {n}必须匹配n  
{n,}
至少匹配n 
{n,m}
匹配次数在[n,m]之间

 

常用示例;

1.      
查询多个文件

grep “sort” *.doc   
在目录下所有doc文件中查sort

grep “sort” filea fileb 
filea,fileb中查找

2.      
计算匹配行数

grep
–c “test” data.txt

3.      
显示非匹配行

grep –v “test” data.txt

4.      
忽略大小写

默认是大小写敏感的,若需要,使用-i进行忽略

   grep
–i
“ignore” data.txt

5.      
正则表示

grep ‘48[34]’ data.txt

grep ‘^[^48]’ data.txt
开头不是4,8

grep ‘[Ss]ept’ data.txt

grep ‘^[0-9][0-5][0-6]’

grep ‘4\{2,\}’ data

6.      
使用“与”
“或”

必须使用参数
–E [E一定大写]

grep –E ‘aaa|bbb’ data

    等价于 grep –c “[L|l]et” dream

7.      
空行及特殊字符

grep ‘^$’ data

grep ‘\.’ myfile

8.      
类名:

grep
允许使用国际字符串模式匹配或匹配模式的类名

[[:upper:]]

[A-Z]

[[:lower:]]

[a-z]

[[:digit:]]

[0-9]

[[:alnum:]]

[0-9a-zA-Z]

[[:space:]]

空格或tab

[[:alpha:]]

[a-zA-Z]

 

grep ‘5[[:upper:]] [[:upper:]]’ data 
5
开头,两个大写

9.      
系统grep命令

ls –l | grep ‘^d’

ls –l | grep ‘^[^d]’

查找内容前后的多少行

      
-A NUM, --after-context=NUM  
匹配行之后多少行[ahead]

      
-B NUM, --before-context=NUM 
匹配行之前多少行[back]

      
-C NUM
--context=NUM      
匹配行前后多少行[上下文context]

处理二进制文件

Grep查找的是text文件,

如果要查找的是二进制文件,则输出如下结果:Binary file file-name matches

      
-a, --text 
使用-a进行二进制文件处理,结果类似文本文件

点亮匹配的内容

将匹配上的内容加颜色显示出来

--colour[=WHEN], --color[=WHEN]  
三种WHEN=never,always,auto

匹配内容的统计与其他

将匹配的内容进行记录统计

-c, --count   -c,统计匹配行数, -cv统计不匹配行数

-o, --only-matching(只显示匹配的内容)

查看目录下面的所有文件(包括子目录)

-R, -r, --recursive  
递归,查询所有子目录

--include=PATTERN 
只查询该模式文件

--exclude=PATTERN 
不查询该模式文件

-n, --line-number  
输出文件名及匹配行号

如何匹配以“-”开始的字符

-e PATTERN, --regexp=PATTERN  
使用正则

在哪些文件中出现

-h, --no-filename 
结果中不输出文件名

-L, --files-without-match 输出没有匹配上的文件名列表

反向匹配

-v, --invert-match 
反向,未匹配的行

-m NUM, --max-count=NUM 最大匹配次数

 

命令:sort

sort命令可以用来对文件的内容进行排序。

sort认为文件的每一行由一个个由空格(可以用-t选项指定其他分隔符)分隔的field组成的。

Sort可将许多不同的域按不同的列顺序分类

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

 

格式:

sort –cmu –o out-putfile [other options] *pos1 *pos2 input-files

 

选项:

-c

测试文件是否已经分类,如果乱序,则输出第一个乱序的行的相关信息,最后返回1.若非乱序,无输出,返回0

-m

合并两个分类文件

-u

删除所有重复行

-o

存储sort结果的输出文件名

sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,但是如果你想把排序结果输出到原文件中,用重定向不可使用.-o就可以解决这个问题】

-t

域分隔符;默认
空格,
tab,可定义

-t选项指定关键字。

它的格式是POS1[,POS2]

POS1指定关键字开始的列,POS2指定关键字结束的列,如果没有POS2,则从POS1到行末都是关键字。

 

其中POS的格式是F[.C][OPTS],F[.C][OPTS]F指定第几个field(从1开始数),C指定这个field里的第几个字符(也是从1开始数)。

 

-b

使用域进行分类时,忽略首个空格【会忽略每一行前面的所有空白部分,从第一个可见字符开始比较】

-n

指定分类是域上数字分类【默认使用字符排序的,若是要数字,使用-n

-r

对分类次序或比较求逆【默认是升序】

–kn

 

 

按照第n个域进行排序

sort [-t delimiter][+filed[column]] [option]

【常用组合
–t ‘
分隔符’ -kn

-k选项的语法格式,如下:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

逗号(“,”)分为Start部分和End部分

如果不设定End部分,那么就认为End被设定为行尾

 

Modifier部分类似nr的选项部分。

FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”,
CStart
可以省略的,省略的话就表示从本域的开头部分开始。

同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(),也是表示结尾到“域尾”。

 

常用示例:

1.      
保存输出

$sort –o result sortfile

$sort sortfile > result

Sort的启动方式,sort认为一空格/多空格为分隔符,要加入其他的,必须使用-t,执行时,先查看-t,若是有,使用其进行分割,若是无,使用空格

 

2.      
查看文件是否已排序

$sort –c sortfile

若未排序,输出信息 
$?=1

若已排序,无信息输出$?=0

3.      
使用其他分隔符

$sort –t 
: sortfile

4.      
排完序后求逆

$sort –t :
-r sortfile

5.      
唯一分类,原文件中重复行去除

$sort –u sortfile

6.      
指定分类域,1开始

$sort –t : -k
4 sortfile   
【第四个域开始】

$sort –t : -k 4 –k 1 sortfile

sort分隔符+ -k指定列 
完成根据某列进行排序】

7.      
指定sort序列

$sort +0 -2 +3 sortfile

8.      
将两个分类文件合并

$sort –m sorted-file1 sorted_file2

    【将两个已排序文件整合,类似合并排序的后半部分】

具体示例:

9.      
对以下文件进行排序

153 6
314 5
222 4
114 3

 

sort -k 1.1,1.2 sort.test

指定了按开始的两列进行排序,即比较"15","31","22","11"来排序

结果:

114 3
153 6
222 4
314 5

 

sort -k 1.3,2.1 sort.test

指定了通过比较"3 6","4 5", "2 4", "4 3"(注意其中的空格)来排序

结果:

222 4
153 6
114 3
314 5

 

sort -k 1.3,1.3 sort.test

指定只按第3列来排序,则因为第2

抱歉!评论已关闭.