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

Posted *平凡*随风舞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本学习进阶和正则表达示的应用相关的知识,希望对你有一定的参考价值。

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脚本学习进阶和正则表达示的应用的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本学习笔记12-正则表达式

Shell脚本三剑客——Grep(进阶版egrep)SedAwk命令

shell脚本——正则表达式(包含grep详细介绍及应用)

shell编程之正则表达式基础正则表达式

shell脚本编程之冒泡排序脚本实现(解释非常详细,涉及正则表达式)

shell脚本正则表达式三剑客之一(grep,egrep)