文本处理三剑客:1、grep  2、sed  3、awk

一、grep:(过滤)

grep的使用,主要的参数有:

-n  :显示行号;
-o  :只显示匹配的内容
-q  :静默模式,没有任何输出,得用echo$?来判断执行成功没有,即有没有过滤到想要的内容

-l  :如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc 
-A  :如果匹配成功,则将匹配行及其后n行一起打印出来
-B  :如果匹配成功,则将匹配行及其前n行一起打印出来
-C  :如果匹配成功,则将匹配行及其前后n行一起打印出来
--color
-c  :如果匹配成功,则将匹配到的行数打印出来
-E  :等于egrep,grep的扩展正则

-i  :忽略大小写

-v  :取反,不匹配
-w:匹配单词,过滤单词

 

基本正则表达式:

例如:

^b,表达的是搜寻以b开头的行

^.,表达的是行首

word$,表达的是以单词$结尾的行

.,表达的是匹配任意字符

\,是转意字符

b*,指的是有0至无穷个b

[n1-n2],匹配一个字符范围中的一个字符。

ab{3},指的是左边的b有3个;ab{2,4},指的是左边的b有2至4个;ab{2,},指的是左边的b有2至无穷个

 

扩展正则表达式

+,ab+,指的是左边的b有1至无穷个

?,ab?,指的是左边的b显示的次数是0次或者1次

|,或(or)的方式匹配多个字串 

(),匹配整个括号内的字符串,原来都是匹配单个字符


使用以下举例:正则表达式及字符处理
目标文件/etc/passwd,使用grep命令或egrep
1.显示出所有含有root的行:

grep ‘root’ /etc/passwd

 

2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的内容:
grep -C2 'bash' /etc/passwd

3. 显示出有多少行含有nologin。

grep -c 'nologin' /etc/passwd

4.显示出那些行含有root,并将行号一块输出。
grep -nw 'root' /etc/passwd

5.新建用户
abominable
abominate
anomie
atomize
 编写正则表达式,将他们匹配出来
egrep 'a.omi(nabl|nat|z|)e' /etc/passwd

 在etc/passwd下过滤出

 abominable
abominate
anomie
atomize

egrep '^a[a-z]+e' /etc/passwd或者egrep 'a.omi(nabl|nat|z|)e' /etc/passwd

 



6.建四个用户
Alex213sb
Wpq2222b
yH438PIG
egon666
过滤出用户名组成是字母+数字+字母的行
egrep '^[a-zA-Z]+[0-9]+[a-zA-Z]+' /etc/passwd

7.显示出/etc目录下所有包含root的文件名
grep -o ‘root’ /etc/passwd


8. 过滤掉/etc/ssh/sshd_config内所有注释和所有空行
grep -v '^#' /etc/ssh/sshd_config |grep -v '^ *$'


二、sed 流编辑器(包括1、定位   2、处理)
sed的可选参数比较少,主要就是下面这几个。

(1)-e 允许多项编辑 

(2)-i 直接修改

(3)-f 指定sed脚本文件

(4)-n 取消默认的输出 

sed的匹配是以‘/’开头和结尾的,中间包含着对文本的匹配模式
使用以下举例:以/etc/passwd文件为模板
1,删除文件每行的第一个字符。
 sed -r 's/.//' /etc/passwd或sed -r 's/^(.)(.*)/\2/' /etc/passwd

 

2,删除文件每行的第二个字符。
 sed -r 's/^(.)(.)(.*)/\1\3/' /etc/passwd



3,删除文件每行的最后一个字符。
sed 's/.$//' /etc/passwd或者sed -r 's/(.*)(.)$/\1/' /etc/passwd



4,删除一个文件中所有的数字。
sed -r 's/[0-9]//g' /etc/passwd

 

 

5,删除每行开头的所有空格。
sed -r 's/ //g' /etc/passwd或者sed -r ‘s/^ *//g’ /etc/passwd

 

 

6,用制表符替换文件中出现的所有空格。
sed -r 's/ /\t/g' /etc/passwd

 


7,把所有大写字母用括号()括起来。

sed 's/[A-Z]/(&)/ /etc/passwd'

 

8,打印每行3次。
sed -r 'p;p' /etc/passwd

9,隔行删除。
sed -r '1~2d' /etc/passwd

 

10,只显示每行的第一个单词。 
sed -r 's/^([a-Z]+)([^a-Z]+)(.*)/\1/' /etc/passwd
 三、awk使用
-F 定义字段分隔符,默认的分隔符是连续的空格或制表符
正则需要用//包围起来 
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字 NR变量定址 
NR 表示AWK读入的行数
FNR表示读入行所在文件中的行数

调用awk

有三种方式调用awk

1.命令行方式
2.shell脚本方式
3.将所有的awk命令插入一个单独文件,然后调用:
用以下举例:

(1)打印uid在30~40范围内的用户名。

awk -F: '$3>30 && $3<40 {print $1}' /etc/passwd

(2)打印第5-10行的行号和用户名

awk -F: 'NR>=5 && NR<=10 {print $1 NR}' /etc/passwd

(3)打印奇数行

awk -F: 'NR%2!=0 {print $1 "..." NR}' /etc/passwd

(4)打印偶数行

awk -F: 'NR%2==0 {print $1 "..." NR}' /etc/passwd

(5)打印字段数大于5的行(显示了字段数大于5的行和用户名)

awk -F : 'NF>5{print NR $1}' /etc/passwd

(6)打印UID不等于GID的用户名

awk -F: '$3!=$4 {print $1}' /etc/passwd

(7)打印没有指定shell的用户


 

												

shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)的更多相关文章

  1. shell脚本三剑客:grep、sed、awk

    shell脚本三剑客:grep  sed  awk grep语法: grep [OPTIONS] PATTERN [FILE] 常用选项 -c                       统计匹配到的 ...

  2. Shell—三剑客(grep、sed、awk)

    grep命令详解 文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行. 命令格式:grep  [options]  pattern  filename.gr ...

  3. shell之三大文本处理工具grep、sed及awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  4. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

  5. Shell常用工具find,grep,sed,awk,xargs命令

    最近学习shell命令,对grep,sed,awk命令有点混乱,故小结一下,巩固一遍. 注意:find , grep , sed, awk可使用基本正则表达式字符,find,grep,awk也支持扩展 ...

  6. Linux 文本处理工具grep,sed,awk

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  8. shell基础 -- grep、sed、awk命令简介

    在 shell 编程中,常需要处理文本,这里介绍几个文本处理命令. 一.grep 命令 grep 命令由来已久,用 grep 命令来查找 文本十分方便.在 POSIX 系统上,grep 可以在两种正则 ...

  9. Linux文本三剑客超详细教程---grep、sed、awk

    awk.grep.sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单 ...

随机推荐

  1. 小议Android多进程以致Application多次初始化

    最近遇到一个bug,当应用加了多进程后,比如总共进程数为N,会出现在`startService()`时`onStartCommand()`方法会被重复调用`(N-1)`次的奇怪现象. ***## 祸起 ...

  2. C++学习013多态

    何为多态 面向对象最要的特征之一就是多态,而纯虚函数是实现多态的主要方式.它可以提供一个通过用的接口,同样调用一个方法, 由于运算对象不同,方法也不同,这也就是所谓的动态绑定. #include &l ...

  3. 【app.js】配置及App函数说明

    app.js中的App函数用来注册一个小程序或设置全局变量. App函数: 语法:App(Object)     参数: Object json对象     说明: App函数必须在app.js中调用 ...

  4. 05-Mysql数据库----补充内容

    数据库命名规则: 数据库命名规则: 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 # 基本上跟python或者 ...

  5. 输出不重复的质因数(C++)

    [问题描述] 从键盘上输入一个大于 1 的正整数,输出它所有不等的质因数.(什么是质因数?既是质数,又是因数) [代码展示] # include<iostream>using namesp ...

  6. 条件随机场CRF

    条件随机场(CRF)是给定一组输入随机变量X的条件下另一组输出随机变量Y的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场.实际上是定义在时序数据上的对数线性模型.条件随机场属于判别模型. ...

  7. ipfs02笔记

    IPFS-day02 其他常用操作 添加文件并用文件夹包裹 ipfs add xxx -w 把內容快取到本地,并提供给他人.官网文档 ipfs pin add QmT7TX5vGmFz86V8cDkP ...

  8. 【集训试题】SiriusRen的卡牌 set

    题意概述: 给出N张卡牌,每张有三个属性a,b,c,同时给出所有属性可能的最大值A,B,C.对于一张卡牌,当这张卡牌至少有两个属性大于另外一张卡牌的对应两个属性的时候,认为这张卡牌更加优秀.现在问有多 ...

  9. 牛客网/LeetCode/七月在线/HelloWorld114

    除了知乎,还有这些网站与offer/内推/秋招/春招相关. 其中HelloWorld114更是囊括许多IT知识. 当然,我们可以拓宽思考的维度,既然课堂上的老师讲不好,我们可以自己找资源啊= => ...

  10. tar 加密压缩和解密解压

    加密压缩 tar -czvf - file | openssl des3 -salt -k password -out /path/to/file.tar.gz 解密解压 openssl des3 - ...