grep,sed,awk笔记

grep详解:

1、 作用:文本搜索,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行;

2、 “模式”:由正则表达式元字符及文本字符所编写的过滤条件;

3、 语法格式:

grep [option] pattern [file..]

4、 grep命令常用选项:

--color=auto:对匹配到的文本着色后高亮显示;

-i:ignorecase,忽略字符大小写;

-o:仅显示匹配到的字符串;

-v:显示不能够被pattern匹配到的行;

-q:静默模式,即不输出任何信息,只关心匹配的有没有找到,不关心内容,通常配合 echo $? 使用;

-n:显示匹配到模式的行号;

-c:统计匹配到模式的行数;

-A #:after,显示匹配到模式的后#行;

-B #:before,显示匹配到模式的前#行;

-C #:context,显示匹配到模式的前后各#行

-e:实现多个匹配模式间的逻辑or关系

-w:整行匹配整个单词,其匹配到的必须是一个完整的单词,而不是其中一部分;

-E:使用ERE,支持使用扩展的正则表达式,同egrep

注意:

模式匹配时,所匹配的模式最好使用加双引号或单引号引起来,即:"PARTERN"

5、 演示:

使用grep过滤/etc/passwd文件中关键字为root的方法;

image.png

--color=auto选项,对匹配到的文本着色后高亮显示

image.png

-i选项,忽略大小写

image.png

-o选项,仅显示匹配到的字符串

image.png

-v选项,显示不能够被pattern匹配到的行

image.png

-n显示匹配到的行号

image.png

-c统计匹配的行数

image.png

正则表达式详解:

由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能;

分为两类:基本正则表达式和扩展正则表达式;

基本正则表达式:

1、 字符匹配

. :匹配任意单个字符;

[ ] :匹配指定范围内的任意单个字符

[:upper:] : 所有大写字母;

[:lower:]:所有小写字母;

[:alpha:]:所有字母(不区分大小写)

[:digit:]:表示所有的数字;

[:alnum:]:表示所有的字母和数字;

[:space:]:表示所有的空白字符;

[:punct:]:表示所有的标点符号

[^] :匹配指定范围外的任意单个字符

2、 匹配次数

.* :任意长度的任意字符;

\? :匹配其前面的字符0或1次,即前面的可有可无;

\+ :匹配其前面的字符1次或多次,即前面的字符要出现至少1次;

\{m\}:匹配前面的字符m次;(精确匹配)

\{m,n\}:匹配前面的字符至少m次,至多n次;

\{0,n\}:匹配前面的字符至多n次;

\{m,\}:匹配前面的字符至少m次

3、 位置锚定

^:行首锚定,用于模式的最左侧;(表示以什么开头的行)

$:行尾锚定,用于模式的最右侧;(表示以什么结尾的行)

^PATTERN$:用于模式匹配整行;

^$:空行,不包含有空格的行;

^[[:space:]]*$ :空白行,包含有空格的行;

演示:

1、“.”匹配任意单个字符

image.png

2、[]:匹配指定范围内的任意单个字符

image.png

4、 匹配次数

image.png

5、 位置锚定

image.png

sed详解

1、 语法结构

sed [option] script [input-file]

2、 选项:

-n:不输出模式空间内容至屏幕(静默模式);

-e script:多点编辑,指定多脚本编辑;

-f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本并运行(每行一个编辑命令);

-r:支持使用扩展正则表达式;

-i:原处编辑(直接修改源文件);-i.back(备份)

3、 地址界定

单地址:

#:表示数字,指定的行

$:最后一行;

/pattern/:被此处模式所能够匹配到的每一行;

地址范围:

#,# :从#行,到#行;

#,+n:从#行开始,一直到向下的n行;

/pat1/,/pat2/:从第一次被pat1匹配到的行开始,到第一次被pat2匹配到的行结束,中间的所有行;

#,/pat1/: 从#行开始,到第一次被pat1匹配到的行结束,中间的所有行。

~:步进,指定起始行及步长。

1~2:所有奇数行

2~2:所有偶数行

4、 编辑命令

d:删除模式空间匹配的行;

p:显示模式空间中被地址定界匹配到的内容;

a \text:在行后面追加文本;支持使用\n实现多行追加;

i \text:在行前面插入文本;支持使用\n实现多行插入;

c\ text:把指定到的行替换为此处指定的文本“text”;

w /path/to/somefile:保存模式空间中匹配到的行至指定的文件当中;

r /path/from/somefile:读取指定文件的内容至当前文件被模式匹配到的行处;实现文件合并

= : 为模式空间中匹配到的行打印行号;

!:条件取反,模式空间中匹配到的行取反处理;

s///:查找替换,其分隔符可自行指定,通常常用的有:s@@@,s###等

替换标记:

g:全局替换;

w /PATH/TO/SOMEFILE:将替换成功后的结果保存至指定文件中;

p:显示替换成功后的行;

&:代表要查找的字符串

5、 演示

d:删除模式空空间匹配到的行

image.png

p:打印模式空间的行

image.png

w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中

image.png

s///查找替换,及多点编辑

image.png

awk详解

1、 使用方法

awk '{pattern + action}' {filenames}

2、 调用awk

命令行方式

awk [-F field-separator] 'commands' input-file(s)

其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

shell脚本方式

将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh

可以换成:#!/bin/awk

将所有的awk命令插入一个单独文件,然后调用:

awk -f awk-script-file input-file(s)

其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

3、 示例

假设last –n 5的输入如下:

image.png

如果只是显示最近登录的5个账号

image.png

如果只是显示/etc/passwd的账户

image.png

如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

image.png

AWK内置变量:

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

image.png

使用printf替代print,可以让代码更加简洁,易读

image.png

搜索/etc/passwd有root关键字的所有行

image.png

猜你喜欢

转载自blog.51cto.com/12554680/2307019