shell的文本处理( grep / sed / awk / find)

######1.grep文本过滤明令######

全面搜索研究正则表达式并显示出来

grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 ,打印匹配到的行。
由正则表达式或者字符及基本文本字符所编写的过滤条件。

###1.grep的格式###

grep   匹配条件  处理文件

###2.grep中字符的匹配位置设定###

^ 关键字             ##以 “关键字”开头
关键字 $            ##以 “关键字”结尾
\< 关键字           ##“关键字”前没有字符
关键字 \>           ##“关键字”后没有字符
\< 关键字 \>       ##“关键字”前后均没有字符

grep  -i    ##忽略大小写

###3.grep的正则表达式###

1)grep   r...   file         ##以r开头的任意3个字符的行
2)grep   r...t   file        ##以r开头、t结尾的,并且中间有任意3个字符的行
3)grep   ...t    file        ##以t结尾的,前面有3个字符的行

###4.grep 正则表达式与扩展正则表达式###

正规的 grep 不支持扩展的正则表达式,
竖线是用于表示“或”的扩展正则表达式字符,正规的 grep 无法识别
加上反斜杠,这个字符就被翻译成扩展正则表达式,就像 egrp和grep -E 一样

###5.grep 中字符的匹配次数设定###

.*                  ##关键字之间匹配任意字符
*                   ##字符出现 [0- 任意次 ]
\?                 ##字符出现 [0-1 次 ]
\+                 ##字符出现 [1- 任意次 ]
\{n\}              ##字符出现 [n 次 ]
|{m,n\}          ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\}           ##字符出现 [0-n 次 ]
\{m,\}            ##字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy   ##关键字出现 [n 次 ]

*     ##字符出现 [0- 任意次 ]

\+     ##字符出现 [1- 任意次 ]

\{n\}            ##字符出现 [n 次 ]
|{m,n\}          ##字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\}          ##字符出现 [0-n 次 ]
\{m,\}           ##字符出现 [ 至少 m 次 ]

\?     ##字符出现 [0-1 次 ]

######2.sed行编辑器######

用来操作纯 ASCII 码的文本
处理时,把当前处理的行存储在临时缓冲区中,称为“模式间” (patternspace),可以指定仅仅处理哪些行
sed 符合模式条件的处理,不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕
接着处理下一行,这样不断重复,直到文件末尾

调用sed 命令格式:
有两种形式:
sed  [options]   ' command '   file(s)
sed  [options]   -f   scriptfile   file(s)

###1.p 模式操作###

sed   -n    '/\:/p'  file              ##显示以:隔开的行,不复制
sed   -n    '/ xxx$ /p'  file
       ##显示以xxx结尾的行,不复制
sed   -n    '/ ^xxx /p'  file       ##显示以xxx开头的行,不复制
sed   -n    '2,6p'   file           ##显示第2行至第6行,不复制
sed   -n    '2,6!p'  file           ##显示除了第2行至第6行以外的行,不复制

sed -n '/\:/p'  xxx    ##显示以:隔开的行

sed -n /^#/p  xxx     ##显示以#开头的行

sed -n '/^#/!'p  xxx  ##显示除了以#开头的行

cat -b  xxx   ##跳过空行显示行号

cat -n  xxx   ##包括空行显示行号

cat -n  xxx | sed -n '6p'             ##显示第6行
cat -n  xxx | sed -n '2,6p'           ##显示第2行至第6行
cat -n  xxx | sed -n -e '2p' -e '6p'  ##显示第2行和第6行
cat -n  xxx | sed -n -e '2p;6p'       ##显示第2行和第6行

 

###2. d 模式操作###

sed   '/^xxx/d'  file           ##删除以xxx开头的行,并显示
sed    '/^xxx/!d'  file         ##删除除了以xxx开头的行之外的行,并显示
sed    '/xxx $/d'  file         ##删除以xxx结尾的行,并显示
sed    '1,4d'  file              ##删除第1行至第4行,并显示
sed    –n    '/^xxx/d'  file  ##删除以xxx开头的行,不显示

sed   '/^xxx/d'     ##删除以xxx开头的行,并显示
sed   '/^xxx/!d'    ##删除除了以xxx开头的行之外的行,并显示(只保留以xxx开头的行)
sed –n  '/^xxx/d'   ##删除以xxx开头的行,不显示

cat -n  xxx | sed '4d'             ##删除第4行,并查看
cat -n  xxx | sed '4,6d'           ##删除第4行至第6行,并查看
cat -n  xxx | sed  -e '4d;6d'      ##删除第4行和第6行,并查看

###3.a 模式操作###

sed  '/^xxx/a \hello westos'   file             ##添加hello westos到以xxx开头的行的下一行
sed  '/^xxx/a \hello \nwestos'   file      ##添加[hello换行westos]到以xxx开头的行的下一行

sed  'axxx'  ##添加xxx到每一行的下一行

 

###4. i 模式操作###

sed   '/^xxx/i\hello \nwestos'   file       ##插入[hello换行westos]到以xxx开头的行的上一行

###5. c 模式操作###

sed '/^xxx/c\hello \nwestos'   file        ##用[hello换行westos]替换以xxx开头的行

###6. w 模式操作###

sed  '/^xxx/w file1'   file             ##将以xxx开头的行导入到一个新文件中,并显示
sed  -n  '/^xxx/w  file1'  file          ##将以xxx开头的行导入到一个新文件中,不显示
            

###7. sed的其他用法###

sed   '*/xxx'   file        ##将xxx文件里的内容插入到每一行的下一行
sed   '6r*/xxx'   file    ##将xxx文件里的内容插入到第6行的下一行

sed    '/^xxx/='   file                                         ##显示以xxx开头的行的行号和所有内容
sed   -n  '/^xxx/='   file                                    ##显示以xxx开头的行的行号,不显示内容
sed   -n  -e  '/^xxx/p'  -e  '/^xxx/='   file          ##显示以xxx开头的行的行号和内容

sed   -nf   file2   file     ##执行file2文件中的条件,不复制原文件内容

sed   ' = '   file                                   ##在文件每一行的上一行插入行号
sed   ' N;s/ \ n /  /g'  file                     ##将文件中显示的行号移至每一行前面,并空格

sed   's/^xxx/***/g'   file                                 ##将文件中所有的xxx替换成***,并显示
sed   -e  's/xxx/***/g;s/###/+++/g'  file       ##将文件中所有的xxx替换成***和###替换成+++,并显示
sed   's/ \ / / # /'   file                                   ##将文件中的 / 替换成#,只替换第一个,并显示

sed  '4s/xxx/***/g'   file                           ##将第4行的xxx替换成***,并显示全文
sed  '2,4s/xxx/***/g'  file                         ##将第2行到第4行的xxx替换成***,并显示全文
sed  '/###/,/+++/s/xxx/***/g'  file            ##将以###开头的行至以+++开头的行中的xxx替换成***,并显示全文

sed   's/ \ / /  /g'  file               ##将文中的所有“ \ ”换为“ ”,并显示
sed   's@/@  @g'  file          ##@和 / 是一个意思,为了方便区分使用
sed   's@xxx@***@g'  file   ##将文中的所有xxx换为***,并显示

sed    'G'   file              ##将文件中的每一行都空一行
sed   '$!G'   file           ##除了最后一行后不空行外,其他的每一行都空一行
sed   -n  '$p'  file         ##显示最后一行

######3. awk报告生成器######

awk处理机制:逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作。
awk在命令格式上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行读入文本,执行相应的处理。是最常见的编辑指令块
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果


###1.awk基本用法###

awk   '{print FILENAME}'    file              ##将文件的所有行替换为file的名称,并显示
awk   '{print  "NR" }'    file                     ##显示文中的所有行号             
awk  -F : '{print  "NF" }'    file                ##显示每一行的列数

【注释】passwd7列的含义:    用户名:用户密码:uid:gid:用户描述:用户家目录:用户默认shell

awk 'BEGIN{print  xxx}'  file                ##文件以xxx开头,并显示xxx                              
awk  -F : '{print  xxx}'  file                   ##显示文件第1列
awk 'END{print  ***}'  file                    ##文件以***结尾,并显示***
awk -F : 'BEGIN{print  xxx}{print $n}END{***}'  file        ##显示文件以xxx开头,第n列,以***结尾


awk '/xxx$/' file                                       ##显示以xxx结尾的行
awk -F : '/xxx$/{print $1}'  file                 ##显示以xxx结尾行的第1列
awk -F : '!/xxx$/{print $1}'  file               ##显示除了以xxx结尾行之外的所有行的第1列
awk 'BEGIN{a=34;print a+12}'              ##显示34+12的结果 (计算功能)

awk -F : '/^[a-d]/{print $1}'  file                ##显示以a到d开头的行的第1列
awk -F : '/^a|xxx$/{print $1,$7}' file          ##显示以a开头或者以xxx结尾的行的第1列到第7列

【注释】:-F : 指定以:为分割符    [ ]模糊器配     { }精确匹配      |  两个条件满足一个即可

awk -F : '$6~/xxx$/{print $1}' file                ##显示第6列以xxx结尾的行的第1列
awk -F : '$6!~/xxx$/{print $1,$7}'  file         ##显示除了第6列以xxx结尾的行之外所有行的第1列到第7列

###2.截取ip###

######4. find命令######

  find /dir/ -name xxx                                  ##查找目录下名称为xxx的文件
  find /dir/ -maxdepth 1 -name xxx             ##查找目录下最大深度为1的名称为xxx的文件
  find /dir/ -mindepth 2 -name xxx              ##查找目录下最小深度为2的名称为xxx的文件

   find /dir/ -user xxx                                     ##查找目录下用户为xxx的文件
   find /dir/ -group ***                                    ##查找目录下组为***的文件
   find /dir/ -user xxx -a -group ***                 ##查找目录下用户为xxx并且组为***的文件
   find /dir/ -user xxx -o -group ***                 ##查找目录下用户为xxx或者组为***的文件
   find /dir/ -user xxx -a -not  -group ***         ##查找目录下用户为xxx并且组不为***的文件

  find /dir -size 20k                                     ##查找目录下大小为20k的文件
  find /dir -size -20k                                    ##查找目录下大小低于20k的文件
  find /dir -size +20k                                   ##查找目录下大小高于20k的文件
  find /dir -size +20k -exec rm -fr {} \;         ##查找目录下大小高于20k的文件,并删除

find /dir/ -type l                 ##查找目录下类型为链接的文件

  find /dir -ctime 10                  ##查找目录下更改时间为10天的文件
  find /dir -ctime -10                 ##查找目录下更改时间小于10天的文件
  find /dir -ctime +10                ##查找目录下更改时间大于10天的文件
  find /dir -cmin 10                   ##查找目录下更改时间为10min的文件
  find /dir -cmin +10                 ##查找目录下更改时间大于10min的文件
  find /dir -cmin -10                  ##查找目录下更改时间小于10min的文件

  find /dir/ -perm 444                   ##查找目录下权限为444的文件(同时满足u=4并且g=4并且o=4)
  find /dir/ -perm -444                  ##查找目录下权限大于等于444的文件(同时满足u位含有4,并且g位含有4,并且o位含有4)
  find /dir/ -perm  /444                 ##查找目录下权限有1位为4的文件(满足1项即可,u位含有4,或者g位含有4,或者o位含有4)
  find /dir/ -perm  +444                ##意思与/444一样,(企业7之前的版本为+,企业7之后的版本为/)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值