码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本学习进阶和正则表达示的应用

时间:2017-11-25 23:36:35      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:eee   创建   end   script   扩展   rgs   忽略   图片   ges   

Sort 排序:

-f:     忽略字符大小写
-n:    比较数值大小
-t:    指定分隔符
-k:    指定分隔后进行比较字段序号
-u:    重复的行,只显示一次

 技术分享图片

按第二行数值排序:

$ sort -k2n sort.txt
ccc 8
aaa 11
yyy 12
eee 22

重复行显示一次:sort -u sort.txt

uniq 处理重复行,与sort配合使用:

技术分享图片

wc命令:

行 | 字符 | 单词
$ wc sort.txt
 6 12 41 sort.txt
$ wc -l sort.txt 
6 sort.txt
$ wc -c sort.txt 
41 sort.txt
$ wc -w sort.txt 
12 sort.txt

  

find命令:

按名字查找
$ find ./ -name "*.sh"
查找当前一级目录下的普通文件
$ find ./ -maxdepth 1 -type f
查找大小在1M到5M之间的 
$ find ~ -size +1M -size -5M
查找log目录10天之前创建的文件
$ find ~/log -ctime +10
查找log目录5天内创建的文件
$ find ~/log -ctime -5

  

ls命令不能读管道或者标准输入,可以使用 exec代替:

find ~/log -ctime +10 -exec ls -la {} \;

  

使用ok选项更安全,会要求确认:

find ~/log -ctime +10 -ok rm - f {} \;

  

当然了,还可以使用 xargs 将前一个命令的输出结果,分成小块解析:

find ./ -maxdepth 1 -type -f | xargs ls -l

  

grep命令可以进行内容的查找:

-r  递归子目录

-i  忽略大小写

-v  排除

 

正则表达示:

字符类:

技术分享图片

数量限定:

技术分享图片

位置限定符:

技术分享图片

特殊字符:

技术分享图片

 

可以使用egrep命令,支持扩展的正则表达示:

例子1:匹配出所有IP地址 XXX.XXX.XXX.XXX

egrep ‘^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$‘ all.txt

例子2:匹配邮箱 XXX@YY.COM|CN

egrep ‘ [0-9a-zA-Z]+@[0-9a-zA-z]+\.(com|cn)$‘ all.txt

  注意:目前分为基础正则和扩展正则,基础正则不支持 ?+  { }  | ().

如果想支持,需要转义字符,写的定要先写扩展正则,在写基础正则。

grep ‘[0-9a-zA-z]\+@[0-9a-zA-Z]\+\.\(com|cn\)$‘ all.txt
或者
grep -E ‘[0-9a-zA-z]+@[0-9a-zA-Z]+\.(com|cn)$‘ all.txt

 最后,对匹配IP地址在进行一次优化:

$ egrep ‘^([0-9]{1,3}\.){3}[0-9]{1,3}$‘ all.txt 

  

SED工具stream editor 流编辑器,和VI同源,处理文件,对文本进行修改!

常见用法:

sed option ‘script‘ file1 file2 ...               ’‘
sed 参数    ‘脚本(/pattern/action)’ 待处理文件

sed option -f scriptfile file1 file2 ...           
sed 参数 –f ‘脚本文件’ 待处理文件

参数说明:

a,    append             追加
i,    insert             插入
d,    delete             删除
s,    substitution     替换

例子:在第二行插入XXXX

sed ‘2ixxxx‘ cash.sh

  -i 是直接修改源文件,需要谨慎使用

删除第4-6行:

sed ‘4,6d‘ cash.sh

  替换read 为write:

sed ‘s/read/write‘ cash.sh

 SED常用指令:

/pattern/p 打印匹配pattern的行
/pattern/d 删除匹配pattern的行
/pattern/s/pattern1/pattern2/ 查找符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2
/pattern/s/pattern1/pattern2/g 查找符合pattern的行,将该行所有匹配pattern1的字符串替换为pattern2

  例如,匹配echo 并打印该行:

sed ‘/echo/p‘ cash.sh

  技术分享图片

此时会显示多一行,如果需要不输入源文件内容,可以使用:

sed ‘/echo/p‘ cash.sh -n

  

删除case所在行
$ sed ‘/case/d‘ case.sh 
将echo替换为print
$ sed ‘/echo/s/echo/print/g‘ case.sh 

地址符号的使用:

sed ‘s/23/-&-/‘ cash.sh

  技术分享图片

\1  \2 代表对应的第一个单元 和 第二个单元

-r 可以使用拓展正则

技术分享图片

去掉Html标签:

sed -r ‘s/<[(/|0-9a-zA-Z)]+>//g‘ hello.html
或者
sed -r ‘s/<[^<>]+>//g‘ hello.html

  

 

  

shell脚本学习进阶和正则表达示的应用

标签:eee   创建   end   script   扩展   rgs   忽略   图片   ges   

原文地址:http://www.cnblogs.com/kellerfz/p/7896621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!