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的方法;
--color=auto选项,对匹配到的文本着色后高亮显示
-i选项,忽略大小写
-o选项,仅显示匹配到的字符串
-v选项,显示不能够被pattern匹配到的行
-n显示匹配到的行号
-c统计匹配的行数
正则表达式详解:
由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能;
分为两类:基本正则表达式和扩展正则表达式;
基本正则表达式:
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、“.”匹配任意单个字符
2、[]:匹配指定范围内的任意单个字符
4、 匹配次数
5、 位置锚定
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:删除模式空空间匹配到的行
p:打印模式空间的行
w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中
s///查找替换,及多点编辑
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的输入如下:
如果只是显示最近登录的5个账号
如果只是显示/etc/passwd的账户
如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
AWK内置变量:
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
使用printf替代print,可以让代码更加简洁,易读
搜索/etc/passwd有root关键字的所有行