sed、awk命令

sed(stream editor): 流编辑器:是一个将一系列编辑命令作用于一批文本文件的理想工具
awk:是一种能够结构化数据进行操作,并产生格式化报表的编程语言

sed从文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中所有命令执行完毕

sed命令由定位文本行和sed编辑命令两部分组成。

sed 只是对缓冲区中原始文件的副本进行编辑,并不编辑原始文件,若需要保存改动内容,需将输出重定向到另一个文件
sed命令格式:sed [选项] ‘命令’ 输入文件

sed –n ‘p’ filename      //打印文件所有内容,sed编辑命令需用单引号括起来
sed –n ‘np’ filename      //打印文件指定行内容
sed –n ‘n,mp’ filename     //打印指定范围行内容
sed –n –e ‘/expression/p’ –e ‘/expression/=’ filename        //-e适用于sed的多个编辑命令
sed –n ‘$p’ filename           //打印文件最后一行
sed –n ‘np’ filename              //匹配非指定字符的命令格式
sed –n ‘/expression/p’ filename    //匹配指定字符的命令格式
注:是expression左右两侧紧跟 /  
sed –n ‘x,y!p’ filename           //打印不在x和y行之间的行
sed –n ‘/pattern/,xp’ filename     //打印匹配pattern的行到x行之间的行
sed –n ‘x,/pattern/p’ filename     //打印x行到匹配pattern的行之间的行

sed -i 就是直接对文本文件进行操作的
sed -i 's/原字符串/新字符串/' /home/1.txt
sed -i 's/原字符串/新字符串/g' /home/1.txt

sed基本编辑命令(在sed脚本中使用)
1.追加文本命令       sed ‘指定地址a\text’ inputfile        //在匹配字符行的下一行追加
2.插入文本命令       sed ‘指定地址i\text’ inputfile        //在匹配字符行的上一行插入
3.修改文本命令       sed ‘指定地址c\text’ inputfile      //将匹配字符行修改为新的内容
4.删除文本命令       sed ‘指定地址d’ inputfile           //删除指定行或指定行范围
5.替换文本命令       sed ‘s/旧字符串/新字符串/[选项]    //替换指定字符
替换 比 修改 更灵活
sed –n ‘s/旧字符串/新字符串/p’ inputfile          //只打印替换行
6.写入一个新文件命令    sed ‘指定地址 w outfile’  inputfile
                sed ‘x,y w outfile’ inputfile       //指定行输出
                sed ‘/pettern/ w outfile’ inputfile  //匹配字符行输出
7.从文件中读入文本命令         sed ‘指定地址 r 文件名’
8.退出命令        sed ‘指定地址 q’ inputfile
               sed ‘5 q’ inputfile
               sed ‘/.r.*/ q’ inputfile
9.变换命令     sed ‘y/旧字符序列/新字符序列/’ inputfile
              要求新字符序列和旧字符序列的字符长度相同
10.显示控制字符     sed –n ‘1’  inputfile
                   sed –n ‘1,$1’ inputfile      //显示所有的…
11.在指定行执行命令组    sed –n ‘/pattern/{p;=}’ inputfile
注:sed有多个编辑命令时用{ },也可以用-e选项
sed ‘/pattern/{n;s/旧字符串/新字符串/;}’ inputfile       //n的含义:将匹配pattern行的下一行由下一个命令处理
利用分号分隔多个编辑命令:        sed ‘编辑命令1;编辑命令2;……’ inputfile

awk 是进行文本处理,从文本或字符串中基于指定规则浏览或抽取信息,在抽取信息的基础上,进行其他文本操作

awk由一个主输入循环维持,主输入循环反复执行,直到终止条件触发,主输入循环自动读取输入文件行

awk调用方法:
1.    awk [-F 域分隔符] ‘awk程序段’ inputfile
2.    awk –f awk脚本文件 输入文件
3.    ./awk脚本文件 输入文件

任何awk语句都由模式和动作组成,模式决定动作何时触发和触发条件,动作执行对输入行的处理
awk命令由模式和动作两部分组成,模式和动作由/分隔
awk认为输入文件是结构化的,awk将每个输入文件定义为记录,行中每个字符串定义为域,域之间用空格、tab键、分号等分隔符分隔

同一行中的域可以不同
awk定义$为域操作符,$后面跟数字或变量来标志域的位置,每条记录的域从1开始编号
$1表示第1个域,$2表示第2个域,$0表示所有的域
awk ‘BEGIN{one=1;two=2} {print $(one+two)}’ inputfile        //$后跟变量

awk –F “选项” ‘ ‘ inputfile            //awk分隔符
FS变量也可以定义分隔符,,在BEGIN中更改,且更实用
awk ‘BEGIN{FS=”,”} {print $0}’ inputfile     

定义awk变量无需声明类型,每个awk变量有两种类型值:字符串值和数值,awk默认数值为0,默认字符串值为空。

awk格式化输出
     print基本语法: print(格式控制符,参数)
awk命令一般必须要有BEGIN
      printf修饰符一般格式:  %width.prec 格式控制符
awk ‘BEGIN {str=”multiprogressor programing”;sub(/pro/,”PRO”,str);printf(“%s\n”,str)}’   
//awk中多个命令之间用分号分隔
向awk本传递参数
        awk脚本 parameter=value 输入文件
awk所有数组都是关联数组,关联数组的索引和元素值之间相关联,关联数组的地址无需连续,关联数组的索引可以是数字,也可以是字符串,
awk命令中,在同一个{ }内的命令之间必须用分号分隔
awk内部变量属于环境变量
awk调用linux命令时需要用双引号将命令括起来
 

猜你喜欢

转载自blog.csdn.net/daha1314/article/details/84589273