sed 、awk 命令 基础使用

1.1 sed
    sed编辑器会作如下操作。
    (1) 一次从输入中读取一行数据。
    (2) 根据所提供的编辑器命令匹配数据。
    (3) 按照命令修改流中的数据。
    (4) 将新的数据输出到STDOUT(不会修改原文件)。
 
命令格式   sed 【options】【script】【file】
 
命令参数
选项
描述
-e
script 在处理输入时,将script中指定的命令添加到已有的命令中(处理命令写在命令中)
-f
file 在处理输入时,将file中指定的命令添加到已有的命令中  (将待执行命令写在文件中)
-n
不产生命令输出,使用print命令来完成输出
 
1.1.1 文本替换 命令s (substitute)  替换时,会区分大小写
    echo "This is a test" | sed 's/test/big test/'           用“big test”替换“test”
    sed 's/dog/cat/' data1.txt                               用“cat”替换“dog”
 
 
运行多个编辑命令
 
sed -e 's/brown/green/; s/dog/cat/' data1.txt
ps: 两个命令都作用到文件中的每行数据上。命令之间必须用分号隔开,并且在命令末尾和分号之间不能有空格
 
将多行命令存入文件运行
    sed编辑器知道每行都是一条单独的命令
 
替换命令默认只会替换每行的第一处文本,
有4种可用的替换标记:
 数字,表明新文本将替换第几处模式匹配的地方;    
     sed 's/test/trial/2' data4.txt  只替换每行第二次匹配的文本
 g,表明新文本将会替换所有匹配的文本;
    sed 's/test/trial/g' data4.txt  替换所有
 p,表明原先行的内容要打印出来;
     sed -n 's/test/trial/p' data5.txt   只输出被修改过的行
 w file,将替换的结果写到文件中。
             sed 's/test/trial/w test.txt' data5.txt  
 
替换内容包括特殊字符时,使用“!”加以区别
 
sed -n 's!conf/server.xml!conf/server-test!p' catalina.log
sed -n 's!conf/server.xml!conf/server-test!gw test.txt' catalina.log
 
 
1.1.2 行寻址(line  address)
        两种方式 : 以数字形式表示行区间、 用文本模式来过滤出行。
    1.1.2.1 单独某行
        sed -n '3s/xerces/xerces-test/p' catalina.log
    1.1.2.2 行区间
        sed -n '3,5s/xerces/xerces-test/p' catalina.log
    
 
    下列两种读取行数方式等同
    sed -n '3,5p' catalina.log > test.txt
    sed -n '3,5w test.txt' catalina.log
 
    1.1.2.3 从某行开始至末尾
        sed '2,$s/dog/cat/' data1.txt
 
1.1.3 多命令组合,以分号“;”分割
    sed -n '3s/xerces/xerces-test/;3s/internal/internal-test/p' catalina.log
    将修改前后打印出来
        sed -n '3{p;3s/internal/internal-test}' catalina.log
1.1.4 删除行 d
    可以和行号、文本匹配(包括正则)搭配使用,删除指定行的内容(原文件未改变
 
 
1.1.5 插入i( insert)、附加文本a( append)
      插入命令 i  会在指定行前增加一个新行;
      附加命令 a 会在指定行后增加一个新行。
 
1.1.6 列出命令 l (小写L),显示特殊字符
 
 

 
1.2 awk、gawk
选项
描述
-F fs 
指定行中划分数据字段的字段分隔符
-f file 
从指定的文件中读取程序
-v var=value 
定义gawk程序中的一个变量及其默认值
-mf N 
指定要处理的数据文件中的最大字段数
-mr N 
指定数据文件中的最大数据行数
-W keyword 
指定gawk的兼容模式或警告等级
 
echo "hai ge tou ya" | awk '{print "this is a"}'
 
1.2.1 gawk的主要特性之一是其处理文本文件中数据的能力。它会自动给一行中的每个数据元素分
配一个变量。变量如下。
$0 
代表整个文本行
$1
代表文本行中的第1个数据字段
$2
代表文本行中的第2个数据字段
$n
代表文本行中的第n个数据字段
默认的字段分隔符是任意的空白字符(例如空格、制表符)
 
1.2.2 需要使用指定分隔符
    sed -n '3,5p' catalina.log | awk -F . '{print $1}'
 
同时在命令文件中,也可用 特殊变量 “FS”来指定分割符  。FS的定义一定要放到 {} 中
 
1.2.3 命令组合(经验证,不会修改原文件)
    
1.2.4 将命令写入文件,“-f”参数引入文件
 
ps  其中用到的变量,和shell变量不同,未使用“$”。尝试使用了“$”后,输出异常,估计是和变量冲突了。
 
1.2.5 增加输出 title  (“BEGIN”一定要大写)
    sed -n '3,5p' catalina.log | awk -f script.swk
 
增加输出页脚 (在末尾输出“END”)  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
发布了29 篇原创文章 · 获赞 9 · 访问量 9292
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章