【shell脚本】常用工具的学习grep、sed、awk、cut

来源:互联网 发布:机械三维设计软件课 编辑:程序博客网 时间:2024/05/16 11:19

grep


功能:
查找过滤工具,查找或者过滤出符合某个模式的字符串,可以和正则表达式搭配使用。
所以本篇博客适合有正则表达式基础的读者阅读哦~。
用法:

grep '正则表达式' 操作的文件名egrep '正则表达式' 操作的文件名grep -E '正则表达式' 操作的文件名grep -F '匹配的字符串' 操作的文件名fgrep  '匹配的字符串' 操作的文件名

其中,egrep相当于grep -E,表示采用扩展(Extend)的正则表达式语法。即对于? + {} () | 这些字符取其特殊含义。直接使用grep表示采用正则表达式基准的(Basic)正则表达式语法。
fgrep相当于grep -F,表示不搜索正则表达式模式,匹配固定字符串,匹配到了会输出整行。
eg:从file文件中找出合法的手机号码:
这里写图片描述

这里写图片描述


sed


简介:
sed是一款流式文本编辑器,它会将文本中的内容一行一行读出来,看是否与正则表达式匹配,如果匹配则执行对应的操作,否则丢弃或输出然后读取下一行。可以一次处理多个文件,默认按照基准模式(Basic)匹配

用法:

sed '/pattern/action'

其中,pattern 表示对要匹配的行的描述,即正则表达式,action表示匹配到了之后对应的操作。
1、将匹配到的内容打印出来,对应的action:p
这里写图片描述
可以看到,sed将文件所有内容都打印了出来,只不过匹配到了的打印了两次。想只打印匹配到的行加上‘-n’参数即可:
这里写图片描述

2、将匹配到的内容删除,对应的action:d
这里写图片描述
说明,sed并不会修改原文件。如果想直接修改原文件,需要加上‘-i’参数即可:
这里写图片描述

3、将匹配到的行内的某一模式的字符串替换,对应的action:s
用法与之前有一点小差异:

sed '/pattern/s/pattern1/pattern2/'sed '/pattern/s/pattern1/pattern2/g' 

表示,匹配符合pattern的行,将该行第一个匹配pattern1的字符串替换为pattern2。最后加g表示全局替换。
eg:
这里写图片描述


awk


简介:
awk是比sed更加强大的文本编辑器,不仅可以按行处理文本,也可以按列处理文本。同时还是一门脚本语言,有像C语言一样的循环和分支,有些部分和C语言十分相似。

用法:

awk '/pattern/{actions}'

pattern是正则表达式,actions是⼀系列操作。 awk程序⼀⾏⼀⾏读出待处理⽂件,如果某⼀⾏与pattern匹配,或者满⾜condition条件,则执⾏相应的actions,如果⼀条awk命令只 有actions部分,则actions作⽤于待处理⽂件的每⼀⾏。
1、awk按列打印。action:print/printf
这里写图片描述
除了print,还可以用printf,用法和C语言一模一样。print后所跟的$2表示打印第二列,$1表示第一列,$0表示所有的列。awk默认的列分隔符是连续的空格或者Tab,也可以自己制定列分隔符, 参数:-F后跟制定的符号:
这里写图片描述

2、awk脚本
这里写图片描述
脚本第一行:#!/usr/bin/awk -f 指定awk解释器。
awk会先执行BEGIN标签内的语句,然后读取指定文件内容,执行花括号内的语句,读取完毕执行END标签内的语句。


cut


简介:
cut以行为处理对象,负责数据的剪切。

用法:

cut -b   //按字节切割 cut -c    //按字符切割

eg:
这里写图片描述
可以看到,按字符切割时,一个字母和一个汉字都算是一个字符。除此之外,cut可以指定域分隔符,切割指定的域:
这里写图片描述
-d 选项指定域分隔符,-f选项指定切割第几个域。

0 0