Linux命令进阶:grep,sed,awk全家桶(文本处理技术详例)

目录

一、前言回顾

二、grep

1、grep是什么?

2、grep用法详例解析

三、sed

1、sed是什么?

 2、sed用法详例解析

四、awk

1、awk是什么?

2、awk用法详例解析

五、总结


一、前言回顾

我之前写的一篇《Linux基本命令及编程环境实验 》,一度爆文,成为热门文章。众所周知,Linux是一类强大的操作系统,它的功能强大,稳定性高,在大公司企业应用广泛,掌握Linux的相关命令操作和知识体系显得十分重要。Linux博大精深,只学习到入门时候就感受到当初设计者的智慧,当然Linux系统也是大牛们智慧的结晶,不断优化迭代更新,衍生了许多版本类型。相对熟悉且使用普遍的发行版本就是Ubuntu。

这篇继续学习探索Linux,算是进阶一步,在前面的基础上,通过详细例子掌握更高级的命令,主要为文本处理技术,grep、sed、awk三个命令,感受神奇强大的Linux!

Linux系统学习相关文章:

  1. Linux基本命令及编程环境实验 [https://blog.csdn.net/Charzous/article/details/108204520]
  2. Linux环境编程进程间通信机制,玩转Linux,理解更透彻![https://blog.csdn.net/Charzous/article/details/108287075]

二、grep

1、grep是什么?

UNIX grep家族由命令grep、egrep和fgrep组成。grep命令在文件中全局搜索正则表达式,并打印包含该表达式的所有行。egrep和fgrep命令是grep的变体。egrep命令是一个扩展的grep,支持更多的re元字符。fgrep命令称为固定grep。

grep命令格式:

grep [option] pattern filename

pattern为正则表达式,filename为目标操作文件名,option为可选择项,具体包括:

-i

忽略字母的大小写
-n 打印行号和匹配的行
-v 打印不匹配的行
-c 只打印匹配的行数
-w 以字符串的形式搜索给定的模式
-l 只打印具有匹配行的文件名称

2、grep用法详例解析

下面通过例子学习grep命令的使用,给定当前目录下的donors文本:

Mike Harrington:(510) 548-1278:250:100:175
Christian Dobbins:(408) 538-2358:155:90:201
Susan Dalsass:(206) 654-6279:250:60:50
Archie McNichol:(206) 548-1348:250:100:175
Jody Savage:(206) 548-1278:15:188:150
Guy Quigley:(916) 343-6410:250:100:175
Dan Savage:(406) 298-7744:450:300:275
Nancy McNeil:(206) 548-1278:250:80:75
John Goldenrod:(916) 348-4278:250:100:175
Chet Main:(510) 548-5258:50:95:135
Tom Savage:(408) 926-3456:250:168:200
Elizabeth Stachelin:(916) 440-1763:175:75:300

 题目:

  1. Print all lines containing the string Tom.
  2. Print all lines where the person's first name starts with J.
  3. Print all lines ending in 175.
  4. Print all lines that don't contain 175.
  5. Print all lines where the phone number is in the 206 area code.

解答:

1. grep 'Tom' donors
2. grep '^J' donors
3. grep '175\>' donors
4. grep -v '175' donors
5. grep '(206)' donors

结果:

三、sed

1、sed是什么?

sed命令是一种流线型的非交互编辑器(Stream editor)。sed程序不与编辑器交互工作,而是允许在命令行键入编辑命令,命名文件,然后在屏幕上查看编辑命令的输出。默认情况下,所有行都打印到屏幕上。sed编辑器是非破坏性的,可以使用shell重定向保存输出,否则它不会更改文件内容。

sed命令格式:

sed [option] '[address]command' filename

常用的option:-n,表示只打印出匹配到的行

command为/pattern/形式的正则表达式,这里sed命令与grep不同在于多了一个address选项,表示要对匹配的文本进行的操作,常用的有:

d 删除行
s 替换匹配的字符串
p 打印行
a

向当前行追加一行或多行文本

 2、sed用法详例解析

题目:

  1. Change John's name to Joanthan
  2. Delete the first three lines
  3. Print lines 5 through 10
  4. Delete lines containing Mike
  5. Delete all blank lines

解答:

1.sed 's/John/Joanthan/' donors
2.sed '1,3d' donors
3.sed -n '5,10p' donors
4.sed '/Mike/d' donors
5.sed '/^[ \t]*$/d' donors

结果:

四、awk

1、awk是什么?

Awk是一种UNIX/Linux编程语言,用于操作数据和生成报告。nawk是一个较新的版本,而nawk是Gnu版本。数据可以来自标准输入、一个或多个文件,也可以作为流程的输出。awk可以在命令行中用于简单的操作,也可以将其写入用于大型应用程序的程序中。因为awk可以操作数据,所以它是shell脚本和管理小型数据库中不可缺少的工具。

awk命令格式:

  1. awk 'pattern' filename
  2. awk '{action}' filename
  3. awk 'pattern {action}' filename

同样类似上面的两种命令,awk功能更加强大,可以指定分隔符按字段取出字符串。

2、awk用法详例解析

题目:

  1. Print all the phone numbers
  2. Print Dan's phone number
  3. Print all last names beginning with D
  4. Print Main’s campaign contributions. Each value should be printed with a leading dollar sign; e.g., $250 $100 $175.
  5. Print the name and total contribution of each person.

解答:

1.awk -F: '{print $2}' donors
2.awk -F: '/Dan/{print $2}' donors
3.awk -F'[ :]' '$2~/^D/{print $2}' donors
4.awk -F'[ :]' '$2~/Main/{print "$"$5,"$"$6,"$"$7}' donors
5.awk -F: '{print $1,$3+$4+$5}' donors

结果:

  1. (406) 298-7744
  2. Dobbins
    Dalsass

  3. $50 $95 $135

五、总结

这篇继续学习探索Linux,进阶一步,通过详细例子掌握更高级的命令,主要为文本处理技术,grep、sed、awk三个命令,感受神奇强大的Linux。从详细例子学习中发现,掌握正则表达式也是很关键。众所周知,Linux是一类强大的操作系统,它的功能强大,稳定性高,在大公司企业应用广泛,掌握Linux的相关命令操作和知识体系显得十分重要。

如果觉得不错欢迎“一键三连”哦,点赞收藏关注,有问题直接评论,交流学习!

Linux系统学习相关文章:

  1. Linux基本命令及编程环境实验 [https://blog.csdn.net/Charzous/article/details/108204520]
  2. Linux环境编程进程间通信机制,玩转Linux,理解更透彻![https://blog.csdn.net/Charzous/article/details/108287075]

我的CSDN博客:https://blog.csdn.net/Charzous/article/details/110507267

猜你喜欢

转载自blog.csdn.net/Charzous/article/details/110507267
今日推荐