在模式空间中,完成匹配的操作。当没有匹配上的时候,文本行内容会默认输出stdout;当匹配上文本行的时候,会执行编辑命令,执行结果输出到stdout中。
保持空间可以理解为一个暂存区,只是用于完成额外的动作。
参数
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行(改变指向)至模式空间中;
N:追加读取匹配到的行的下一行(改变指向)至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
举例:提取字符串
/bin/bash info="hellozimskyshenzhen" echo $info | sed 's/hello\(\w\+\)shenzhen/\1/g'备注:
sed中不支持\d,如果要用数字用[0-9],但是支持\w。
sed中的()要转义,+要转义,<>大于小于号要转义。
举例:判断是否存在指定格式的字符串
#!/bin/bash # 判断输入是否为整数 if [ -n "$(echo $1 | sed -n '/^[0-9]\+$/p')" ] ; then echo 'yes' else echo 'no' fi 五、awk命令 5.1. awk概述awk是发明该工具三个作者姓名的首字母简称,awk是一个报表生成器,主要用于格式化输出。格式化文本输出器。
5.2. 基本用法1. 语法
gawk [option] 'program' FILE
其中program: PATTERN{ACTION STATEMENTS}
{动作指令}可以理解成为命令,最常用的是print、printf
2. awk读取文档过程
按照行来读取文档,根据输入分隔符切分成小部分(用內建变量来表示$0$1$2...),用ACTION STATEMENTS来处理。$0表示显示整行。
3. 选项option
-F:指名输入字段的分隔符;
-v:用来实现自定义变量var=value;
4. PATTERN(用于定界)
空:表示处理文件的每一行
/pattern/:使用正则匹配需要处理的行
!/pattern/:上面取反
关系表达式:结果为真假,结果为真的处理,假的不处理。非0非空字符串为真,其余为假。
行定界:不支持直接给出数字的格式(1,2{...})。见举例。
BEGIN/END模式:BEGIN{}表示仅在开始处理文件中的文本之前执行一次的程序,例如打印表头。END{}表示文本处理完成之后执行一次,例如汇总数据。
5. 变量
內建变量(在引用变量时不用加$)
FS:input field seperator:输入字段分隔符,默认空白字符。使用-v指定。
OFS:输出字段分隔符。使用-v指定。
RS:输入时的换行符
ORS:输出时的换行符
NF:number of field 每一行的字段数量。加上$NF表示最后一列。
NR:number of record 文件的行数,打印出来是打印行号
FNR:多个文件中的行数分别计数
FILENAME:当前文件的文件名
ARGC:参数命令行中参数的个数
ARGV:返回数组,命令行中的每个参数
举例:awk 'BEGIN {print ARGV[0]}' /etc/fstab /etc/issue
在这里ARGV[0]是awk,固定为第0个参数。ARGV[1]是/etc/fstab,ARGV[2]是/etc/issue
举例:awk -v FS=':' '{print $1}' -v OFS=':' /etc/passwd 指名冒号作为输入的分隔符。同awk -F: ...
自定义变量
方法1:-v var=value (区分字符的大小写)
方法2:在program中定义
举例:awk -v test='hello' 'BEGIN {print test}'
awk 'BEGIN {test='hello' print test}'
6. 常用的ACTION命令