什么是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. FFmpeg从入门到精通——进阶篇,SEI那些事儿

    前言 在直播应用的开发过程中,如果把主播端消息事件传递到观众端,一般会以Instant Messaging(即时通讯)的方式传递过去,但因为消息分发通道和直播通道是分开的,因此消息与直播音视频数据的同 ...

  2. python 内建函数isinstance的用法以及与type的区别

    isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo)   如果参数object是classinfo的实例,或者object是class ...

  3. AJAX跨域问题解决方法(4)——调用方解决跨域

    调用方解决跨域的方法只有一种,那就是隐藏跨域. 何为隐藏跨域? 隐藏跨域的核心思路是通过反向代理隐藏跨域以欺骗浏览器 什么是反向代理?反向代理是指通过中间服务器使得访问同一个域名的两个不同url最终会 ...

  4. linux lanmp一件安装包

    转载地址:http://lamp.phpstudy.net/ phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 ...

  5. DATETIME与TIMESTAMP

    DATETIME与TIMESTAMP都能表达一个完整的日期格式:YYYY-MM-DD HH:MM:SS[.fraction] eg: mysql> create table test(id in ...

  6. Fiddler4工具配置及调试手机和PC端浏览器

    Fiddler最大的用处: 模拟请求.修改请求.手机应用调试 Fiddler最新版本 下载地址: http://www.telerik.com/download/fiddler Fiddler 想要监 ...

  7. Spring MVC web.xml+servlet.xml

    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " ...

  8. SQLite-C#-帮助类

    public static class SQLiteHelper { private static string connectionString = string.Empty; #region vo ...

  9. LA 7272 Promotions(dfs)

    https://vjudge.net/problem/UVALive-7272 题意: 公司要提拔人,现在有n个人,现在有m条有向边,A->B表示A的表现比B好,也就是如果B晋升了,那么A肯定会 ...

  10. ThinkPHP开发笔记-视图

    1.如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值,而且assign方法必须在display和show方 ...