sed:
1、概述
(1)模式空间:是处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”
(2)sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
(3)文件内容并没有改变,除非你使用重定向存储输出
2、定址
该地址用数字构成,用逗号分隔的两个行数。
如1,3表示1,2,3行,美元符号($)表示最后一行。
范围可以通过数据,正则表达式或者二者结合的方式确定 。
3、定界
使用“:”“|”“@”“#”等进行分隔
4、命令
调用sed命令有两种形式
sed [-nefri] 'command' file(s)
sed [-nefri] -f 脚本 file(s)
(1)常用选项
-n(重要)∶使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-r(重要)∶sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i(重要)∶直接修改读取的档案内容,而不是由屏幕输出。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;
(2)常用命令
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c:取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行
d:删除,d 后面通常不接任何内容
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p:列印,即将某个选择的内容打印出来。通常 p 会与参数 sed -n 一起运作
s:替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 就是啦
(3)替换一行中的某部分
格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)
awk:
1、概述
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理
2、工作原理
awk 'BEGIN{ commands } pattern{ commands } END{ commands }
第一步:执行BEGIN{ commands }语句块中的语句,只执行一次;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块,只执行一次。
3、内置变量
$n 当前记录的第n个字段
$0 这个变量包含执行过程中当前行的文本内容。
FNR 同NR,但相对于当前文件。
FS 字段分隔符(默认是任何空格)
NF 表示字段数,在执行过程中对应于当前的字段数
NR 表示记录数,在执行过程中对应于当前的行号
OFS 输出字段分隔符(默认值是一个空格)
RS 记录分隔符(默认是一个换行符)
ORS 输出记录分隔符(默认值是一个换行符)
4、
(1)算术运算符
* 乘 、/ 除 、& 求余 、^ *** 求幂
所有用作算术运算符进行操作 ,操作数自动转为数值,所有非数值都变为0
(2)正则运算符
~~! 匹配正则表达式和不匹配正则表达式
5、awk高级输入输出
(1)读取下一条记录
awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并
(2)awk只允许用重定向的>、>>将结果输出到一个文件
6、设置字段定界符
默认字段定界符为空格,可以使用【-F “定界符”】明确指定一个定界符
在BEGIN语句块,可以使用OFS=“定界符”设置输出字段的定界符
7、条件判断语句
if(表达式) if(表达式)
{语句体1} 语句1
else if(表达式) else
{语句体2} 语句2
else
{语句体3}
每条 语句体 后面可以用;分号结尾
8、循环语句
(1)while循环
while(表达式)
{语句}
(2)for循环
for(变量 in 数组) for(变量;条件;表达式)
{语句} {语句}
(3) do while循环
do
{语句}while(条件)
数组:
1、读取数组的值
{ for(item in array) {print array[item]}; } #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
2、返回数组的长度
(1)字符串
length返回字符串以及数组长度,
split进行分割字符串为数组,也会返回分割得到数组长度。
(2)asort对数组进行排序,返回数组的长度
1、概述
(1)模式空间:是处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”
(2)sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
(3)文件内容并没有改变,除非你使用重定向存储输出
2、定址
该地址用数字构成,用逗号分隔的两个行数。
如1,3表示1,2,3行,美元符号($)表示最后一行。
范围可以通过数据,正则表达式或者二者结合的方式确定 。
3、定界
使用“:”“|”“@”“#”等进行分隔
4、命令
调用sed命令有两种形式
sed [-nefri] 'command' file(s)
sed [-nefri] -f 脚本 file(s)
(1)常用选项
-n(重要)∶使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-r(重要)∶sed 的动作支持的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i(重要)∶直接修改读取的档案内容,而不是由屏幕输出。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行filename 内的sed 动作;
(2)常用命令
a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c:取代, c 的后面可以接字串,这些字串可以取代n1,n2 之间的行
d:删除,d 后面通常不接任何内容
i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p:列印,即将某个选择的内容打印出来。通常 p 会与参数 sed -n 一起运作
s:替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 就是啦
(3)替换一行中的某部分
格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式)
awk:
1、概述
相较于sed 常常作用于一整个行的处理,awk 则比较倾向于一行当中分成数个『字段』来处理。 因此,awk 相当的适合处理小型的数据数据处理
2、工作原理
awk 'BEGIN{ commands } pattern{ commands } END{ commands }
第一步:执行BEGIN{ commands }语句块中的语句,只执行一次;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands}语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块,只执行一次。
3、内置变量
$n 当前记录的第n个字段
$0 这个变量包含执行过程中当前行的文本内容。
FNR 同NR,但相对于当前文件。
FS 字段分隔符(默认是任何空格)
NF 表示字段数,在执行过程中对应于当前的字段数
NR 表示记录数,在执行过程中对应于当前的行号
OFS 输出字段分隔符(默认值是一个空格)
RS 记录分隔符(默认是一个换行符)
ORS 输出记录分隔符(默认值是一个换行符)
4、
(1)算术运算符
* 乘 、/ 除 、& 求余 、^ *** 求幂
所有用作算术运算符进行操作 ,操作数自动转为数值,所有非数值都变为0
(2)正则运算符
~~! 匹配正则表达式和不匹配正则表达式
5、awk高级输入输出
(1)读取下一条记录
awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。net语句一般用于多行合并
(2)awk只允许用重定向的>、>>将结果输出到一个文件
6、设置字段定界符
默认字段定界符为空格,可以使用【-F “定界符”】明确指定一个定界符
在BEGIN语句块,可以使用OFS=“定界符”设置输出字段的定界符
7、条件判断语句
if(表达式) if(表达式)
{语句体1} 语句1
else if(表达式) else
{语句体2} 语句2
else
{语句体3}
每条 语句体 后面可以用;分号结尾
8、循环语句
(1)while循环
while(表达式)
{语句}
(2)for循环
for(变量 in 数组) for(变量;条件;表达式)
{语句} {语句}
(3) do while循环
do
{语句}while(条件)
数组:
1、读取数组的值
{ for(item in array) {print array[item]}; } #输出的顺序是随机的
{ for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度
2、返回数组的长度
(1)字符串
length返回字符串以及数组长度,
split进行分割字符串为数组,也会返回分割得到数组长度。
(2)asort对数组进行排序,返回数组的长度