什么是sed和awk

        sed和awk是Linux环境下数据的处理工具,可以完成对数据的增删改查的功能。
        sed处理时是以行尾单位的,awk处理数据时以字段为单位。

sed

        用法:sed  【选项】 【动作】 【文件】 
        以行为处理单位
    选项:
        -n:安静模式,仅显示被处理的行,如果改行是被删除的,则不显示
        -e:add the script to the commands to be executed(用于连接多个动作脚本)
        -r:表示命令使用的动作时延伸型的正则表达式
        -i:直接在文件上进行编辑,而不是输出到屏幕上
        -f:使用脚本文件,即动作编辑在脚本文件中,支持一个脚本文件中使用多个动作
    动作:[n1[,n2]]function
        [n1[,n2]]不一定有,function如下:
        c:行取代,用新行(字符串)替换旧行
        d:删除行
        i: 在当前行前面插入一行数据(字符串)
        p:打印行
        s:s/regexp/replacement/  用新字符串替换旧字符串。s后面接分隔符,默认为/
    练习:
        测试文件:test.c
#include <stdio.h>
int main()
{
printf("This is Main()!\n");
return 0;
}

      删除第2行,并用 return 1; 取代第6行
windeal@ubuntu:~/Windeal/Test$ sed -e '2d' -e '6c \\treturn 1;' test.c
#include <stdio.h>
int main()
{
printf("This is Main()!\n");
return 1;
}
windeal@ubuntu:~/Windeal/Test$

    在动作脚本中    \\t是为了在return前面插入tab,需要两个转义字符
    使用-f脚本选项,在第6行前面插入printf("Hello!\n");  并将第5行的Main替换为MyMain
        
windeal@ubuntu:~/Windeal/Test$ sed -f script test.c
#include <stdio.h>
int main()
{
printf("This is MyMain()!\n");
printf("hello!\n");
return 0;
}
windeal@ubuntu:~/Windeal/Test$

awk

    用法:
         1      mawk  [-W  option]  [-F value] [-v var=value] [--] 'program text' [file ...]
2 mawk [-W option] [-F value] [-v var=value] [-f program-file] [--] [file ...]

         用法1和2的区别在于是直接使用脚本命令还是有脚本文件,即脚本是直接使用还是写在一个文件里
    选项
        -W 表示一些特殊选项(还没怎么用到过)

        -F 表示分隔符
        -v 定义变量,或给变量赋值
        -f  使用脚本
    特殊变量
        NF    每行的字段数
        NR    当前处理行
        FS    分隔符
    脚本形式:
        An  AWK  program  is  a sequence of pattern {action} pairs
and function  definitions.
        即又[条件][动作] [条件][动作]...组成
        [条件]支持逻辑运算符 < > = >= <= ==
        支持格式化输出和if语句
    练习:
        测试数据    stu.txt
No.	Name	Chinese	Math
001 Jack 80 85
002 Jane 90 90
003 Ben 85 90
004 Alice 85 95
        1. 输出行号,第1个字段、第3个字段、第4个字段
windeal@ubuntu:~/Windeal/Test$ awk '{print "line:" NR "\t" $1 "\t" $3 "\t" $4}' stu.txt
line:1 No. Chinese Math
line:2 001 80 85
line:3 002 90 90
line:4 003 85 90
line:5 004 85 95
windeal@ubuntu:~/Windeal/Test$

    注意所有文本要使用双引号
2.输出数学考90的同学
windeal@ubuntu:~/Windeal/Test$  awk 'NR==1 {print} NR>1&&$4==90{print}' stu.txt
No. Name Chinese Math
002 Jane 90 90
003 Ben 85 90
windeal@ubuntu:~/Windeal/Test$


         3 支持格式化输出和if语句
windeal@ubuntu:~/Windeal/Test$ awk '{if(NR==1) printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Sum"}\
NR>=2{Sum=$3+$4
printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,Sum}' stu.txt
No. Name Chinese Math Sum
001 Jack 80 85 165
002 Jane 90 90 180
003 Ben 85 90 175
004 Alice 85 95 180
windeal@ubuntu:~/Windeal/Test$

Sum=$3+$4
后面需要换行,还不清楚为什么。

sed和awk简介的更多相关文章

  1. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  2. linux shell必知必会sed、awk

    sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往 ...

  3. 【Linux进阶】使用grep、find、sed以及awk进行文本操作

    目录 一.元字符 二.grep命令 1. 过滤出包含某字符串的行 2. 过滤出以某字符串开头(结尾)的行 3. 过滤出包含某字符串及其相邻的行 4. 过滤出不包含某关键字的行 5. 过滤出包含多个字符 ...

  4. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  5. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  6. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  7. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  8. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  9. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

随机推荐

  1. Linux数据备份与恢复 dump、restore、dd命令

    dump命令:备份分区.文件或目录 在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下: [root@localhost -]# yum -y install ...

  2. 自定义圆形头像CircleImageView的使用和源码分析

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0806/3268.html tools:context="com.ex ...

  3. 寻路算法A*, JPS(跳点搜索)的一些杂谈

    A*是一个比较经典的启发式寻路算法.是基于dijkstra算法,但是加入了启发函数,使路径搜索效率更高.实现起来很简单.不过要做到通用性高,比如支持各种不同类型的地图,甚至不仅仅是地图,而是个图结构如 ...

  4. oppo R9 WLAN使用代理图解

    以上拼图便是oppo R9 WLAN使用代理图解,代理设为 '手动' ,主机名便是我的电脑的ip地址,端口号是9973: + 9973端口号 (微信web开发者工具不可更改): + 8888 端口号 ...

  5. 源码编译PHP提示zip错误

    本文来源:https://segmentfault.com/q/1010000002696561 /home/levi/soft/php-5.6.8/ext/zip/lib/zipint.h:118: ...

  6. IPTABLES拒绝某个IP某项服务,并记录到日志(rhel7实例)

    #iptables -I INPUT -p icmp -s 192.168.0.1 -j DROP                 \\在INPUT链中插入:如果检测到从192.168.0.1发过来的 ...

  7. jquery 弹窗插件 layer 常见接口

    源自:https://www.cnblogs.com/teamobaby/p/3556584.html 常见接口如下: 方法名 描述 $.layer({}) 核心接口,参数是一个对象,对象属性参见上述 ...

  8. Mysql事物的4种隔离级别

    SQL标准定义了4种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的. 低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. 首先,我们使用 test 数据库, ...

  9. 配置spring boot 内置tomcat的accessLog日志

    #配置内置tomcat的访问日志server.tomcat.accesslog.buffered=trueserver.tomcat.accesslog.directory=/home/hygw/lo ...

  10. 通过ajax提交到url路由

    $regBoxform.find('button').on('click', function(){ /*通过ajax提交请求*/ $.ajax({ type:'post', /*用post 方式提交 ...