grep,awk,sed,sort,cut,tr,wc

1.grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大

主要参数 []

-c : 只输出匹配的行

-I : 不区分大小写

-h : 查询多文件时不显示文件名

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

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

-v : 显示不包含匹配文本的所有行(我经常用除去grep本身)

基本工作方式: grep 要匹配的内容 文件名, 例如:

grep 'test' d* 显示所有以d开头的文件中包含test的行

grep 'test' aa bb cc 显示在 aa bb cc 文件中包含test的行

grep '[a-z]\{5}\' aa 显示所有包含字符串至少有5个连续小写字母的串

^ :锚定行首

$ :锚定行尾。技巧:"^$"用于匹配空白行。

\b或\<:锚定单词的词首。如"\blike"不会匹配alike,但是会匹配liker

\b或\>:锚定单词的词尾。如"\blike\b"不会匹配alike和liker,只会匹配like

\B :与\b作用相反。


 2. awk(关键字:分析&处理) 一行一行的分析处理 awk '条件类型1{动作1}条件类型2{动作2}' filename, awk 也可以读取来自前一个指令的 standard input

相对于sed常常用于一整行处理, awk则比较倾向于一行当中分成数个"字段"(区域)来处理, 默认的分隔符是空格键或tab键

例如:

last -n 5 | awk '{print $1 "\t" $3}' 这里大括号内$1"\t"$3 之间不加空格也可以, 不过最好还是加上个空格, 另外注意"\t"是有双引号的, 因为本身这些内容都在单引号内

$0 代表整行 $1代表第一个区域, 依此类推

awk的处理流程是:

1. 读第一行, 将第一行资料填入变量 $0, $1... 等变量中

2. 依据条件限制, 执行动作

3. 接下来执行下一行

所以, AWK一次处理是一行, 而一次中处理的最小单位是一个区域

另外还有3个变量, NF: 每一行处理的字段数, NR 目前处理到第几行 FS 目前的分隔符

逻辑判断 > < >= <= == !== , 赋值直接使用=

cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "\t" $3}' 首先定义分隔符为:, 然后判断, 注意看, 判断没有写在{}中, 然后执行动作, FS=":"这是一个动作, 赋值动作, 不是一个判断, 所以不写在{}中

BEGIN END , 给程序员一个初始化和收尾的工作, BEGIN之后列出的操作在{}内将在awk开始扫描输入之前执行, 而END{}内的操作, 将在扫描完输入文件后执行.

awk '/test/ {print NR}' abc 将带有test的行的行号打印出来, 注意//之间可以使用正则表达式

awk {}内, 可以使用 if else ,for(i=0;i<10;i++), i=1 while(i

可见, awk的很多用法都等同于C语言, 比如"\t" 分隔符, print的格式, if, while, for 等等


3. sed(关键字: 编辑) 以行为单位的文本编辑工具 sed可以直接修改档案, 不过一般不推荐这么做, 可以分析 standard input

基本工作方式: sed [-nef] '[动作]' [输入文本]

-n : 安静模式, 一般sed用法中, 来自stdin的数据一般会被列出到屏幕上, 如果使用-n参数后, 只有经过sed处理的那一行被列出来.

-e : 多重编辑, 比如你同时又想删除某行, 又想改变其他行, 那么可以用 sed -e '1,5d' -e 's/abc/xxx/g' filename

-f : 首先将 sed的动作写在一个档案内, 然后通过 sed -f scriptfile 就可以直接执行 scriptfile 内的sed动作 (没有实验成功, 不推荐使用)

-i : 直接编辑, 这回就是真的改变文件中的内容了, 别的都只是改变显示. (不推荐使用)

动作:

a 新增, a 后面可以接字符串, 而这个字符串会在新的一行出现. (下一行)

c 取代, c 后面的字符串, 这些字符串可以取代 n1,n2之间的行

d 删除, 后面不接任何东西

i 插入, 后面的字符串, 会在上一行出现

p 打印, 将选择的资料列出, 通常和 sed -n 一起运作 sed -n '3p' 只打印第3行

s 取代, 类似vi中的取代, 1,20s/old/new/g

[line-address]q 退出, 匹配到某行退出, 提高效率

[line-address]r 匹配到的行读取某文件 例如: sed '1r qqq' abc , 注意, 写入的文本是写在了第1行的后边, 也就是第2行

[line-address]w file, 匹配到的行写入某文件  例如: sed -n '/m/w qqq' abc , 从abc中读取带m的行写到qqq文件中, 注意, 这个写入带有覆盖性.

举例:

sed '1d' abc 删除 abc 档案里的第一行, 注意, 这时会显示除了第一行之外的所有行, 因为第一行已经被删除了(实际文件并没有被删除,而只是显示的时候被删除了)

sed -n '1d' abc 什么内容也不显示, 因为经过sed处理的行, 是个删除操作, 所以不现实.

sed '2,$d' abc 删除abc中从第二行到最后一行所有的内容, 注意, $符号正则表达式中表示行末尾, 但是这里并没有说那行末尾, 就会指最后一行末尾, ^开头, 如果没有指定哪行开头, 那么就是第一行开头

sed '$d' abc 只删除了最后一行, 因为并没有指定是那行末尾, 就认为是最后一行末尾

sed '/test/d' abc 文件中所有带 test 的行, 全部删除

sed '/test/a RRRRRRR' abc 将 RRRRRRR 追加到所有的带 test 行的下一行 也有可能通过行 sed '1,5c RRRRRRR' abc

sed '/test/c RRRRRRR' abc 将 RRRRRRR 替换所有带 test 的行, 当然, 这里也可以是通过行来进行替换, 比如 sed '1,5c RRRRRRR' abc


4. sort

-b 忽略每行前面开始出的空格字符。

  -c  检查文件是否已经按照顺序排序。

  -d  排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

  -f  排序时,将小写字母视为大写字母。

  -i  排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

  -m  将几个排序好的文件进行合并。

  -M  将前面3个字母依照月份的缩写进行排序。

  -n  依照数值的大小排序。

  -o<输出文件>  将排序后的结果存入指定的文件。

  -r  以相反的顺序来排序。

  -t<分隔字符>  指定排序时所用的栏位分隔字符

例如:

sort -n -k2-t'-' date // -t<分隔字符>   指定排序时所用的栏位分隔字符。  -k  选择以哪个区间进行排序

2017-01-09

2017-04-24

2017-10-23

2017-12-02


5. cut是一个选取命令,以行为单位,用指定分隔符将行切分为若干字段,选取所需要的字段。

1、语法格式

cut [option] files

option常用参数如下:

-d:用来定义分隔符,默认为tab键,一般与-f配合使用(如果分隔符是空格,必须是两个单引号之间确实有一个空格,是一个哦,不是支持多个)

-f:需要选取的字段,根据-d切分的字段集选取,下标从1开始

-s:表示不包括那些不含分隔符的行,用于去掉注释或者标题一类的信息

-c:以字符为单位进行分割,可以选取指定字符

-b:以字节为单位进行分割,可以选取指定字节,这些字节位置将忽略多字节字符边界(比如:汉字),除非同时指定了-n参数

-n:取消分割多字节字符,只能和-b参数配合使用,即如果字符的最后一个字节落在由-b参数列表指定的范围之内,则该字符将被选出,否则,该字符将被排除。

不难看出上面参数中,-f、-c、-b都是用来表示提取指定范围数据的,这个范围的表示方法如下:

N:只取第N项

N-:从第N项一直到行尾

N-M:从第N项到第M项(包括M项)

-M:从第一项到第M项(包括M项)

-:从第一项开始到结束的所有项

二、应用实例

1、基本用法

用-d与-f组合选取字段,这里以PATH为例说明之:

复制代码 代码示例:#echo $PATH

/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/changquan.scq/bin

(1)选取第2个路径:

复制代码 代码示例:#echo $PATH | cut -d: -f2

/usr/local/bin

(2)选取第2个开始后的所有路径:

复制代码 代码示例:#echo $PATH | cut -d: -f2-

/usr/local/bin:/bin:/usr/bin:/home/changquan.scq/bin


6. tr

1).file1文件的内容为“1 2 3 4 5 6 7 8 9 10”计算所有数字的总和

 [root@localhost testdir]# echo '1 2 3 4 5 6 7 8 9 10'>file1

[root@localhost testdir]# cat file1

1 2 3 4 5 6 7 8 9 10

[root@localhost testdir]# tr ' ' '+'<file1 | bc

55

2) 处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格

 echo 'xt.,l 1 jrecho xt.,l 1 jrmn2 c*/fe3 uz4'|tr -d '[[:alpha:]]'|tr -d '[[:punct:]]'

3) 将PATH变量的每个目录显示为独立的一行

echo $PATH | tr ":" "\n"

4)删除指定文件的空行

cat /testdir/test8|tr -d '[[:space:]]'

5) 将文件中的每个单词(字母)显示在独立的一行,并无空行

 echo 'This is a test'|tr -s ' ' '\n' # 上面不加参数选项的功作为对比,方便理解参数的作用。


7.wc [选项] 文件…

(1) -l 统计行数:

$ wc -l file

(2) 如果需要将stdin作为输入,使用下列命令:

$ cat file | wc -l

(3) -w 统计单词数:

$ wc -w file

$ cat file | wc -w

(4) -c 统计字符数:

$ wc -c file

$ cat file | wc -c

1.统计demo目录下,js文件数量:

find demo/ -name "*.js" |wc -l

2.统计demo目录下所有js文件代码行数:

find demo/ -name "*.js" |xargs cat|wc -l 或 wc -l `find ./ -name "*.js"`|tail -n1

3.统计demo目录下所有js文件代码行数,过滤了空行:

find /demo -name "*.js" |cat|grep -v ^$|wc -l

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343