您的位置:首页 > 运维架构 > Shell

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

2017-04-25 16:18 746 查看
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选项指定切割第几个域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本 awk