这几个工具是shell中非常好用的文本流处理工具,可以进行查找,编辑或者分析等工作,它们都支持正则表达式,也支持使用shell内置的变量

grep

grep是一个字符串比较工具,用于从文件中提取满足条件的行,条件的部分可以使用正则表达式

$grep [-ABrn] [str] FilePathOrDirPath VS $find [路径] [选项] [参数]

-A [n] #除了该行之外,也列出后续的n行

-B [n] #除了该行之外,也列出之前的n行

-n #显示行号

-r #递归查找所有的目录

示例文档

$ cat -n test_grep
1 #include<stdio.h>
2 int main(){
3 printf("hello,world!");
4 }
5
6
7 角标
8 见后文[^1]
9
10 [^1]:This the first footnote
11

栗子, 找到符合模式[a-g](的行:

$ grep '[a-g](' test_grep
printf("hello,world!");

sed

sed是一个文本流编辑工具,对文件流以行为单位进行替换,删除,新增,提取等操作

$sed [-nefri] [n1[, n2]] [function] [字符串]

-n 只列出经过sed特殊处理的那一行

-e 直接使用命令行对文本流进行编辑,即使用function

-f 直接将sed编辑好的文本流写入一个文件

-i 直接编辑文件内容,不在屏幕输出

function的内容:

a\ :add, 将后接的字符串添加到[n1,n2]的下一行

c: change,,用后接的字符串替代[n1, n2]之间的行

d :delete, 删除n1, n2之间的行

i\ :insert, 将后接的字符串添加到[n1, n2]的上一行

p:print打印,通常和-n一同使用

s:search,取代

栗子,将示例文件所有的main()变成main(void),显示1到4行,注意如果使用行号表示处理的内容,可以直接在后面接p,a\等命令,如果使用字符串,需要使用//将字符串和命令隔离开:

$ sed -e 's/main()/main(void)/' test_grep|sed -n '1,4p'
#include<stdio.h>
int main(void){
printf("hello,world!");
}

awk

awk既是一门语言也是一个文本流处理工具,这里我们只说作为命令的awk,awk是对文本流以字段为单位进行替换,删除,新增,提取等操作的工具, 默认的字段的分隔符为”tab“或”空格“,可以使用-F来重新指定

$awk [-Ffv]'条件类型1{动作1}条件类型2{动作2}...' filename

-F表示重新设置分隔符,awk的默认分隔符是tab或空格,不过不指定,是这样的:

$ last -n 3
jiang pts/0 :0 Mon Sep 19 17:34 still logged in
jiang pts/0 :0 Mon Sep 19 16:50 - 16:50 (00:00)
jiang pts/0 :0 Mon Sep 19 16:29 - 16:43 (00:14)
$ last -n 4|awk '{print $1}'
jiang
jiang
jiang
jiang

如果指定了以“M”为分隔符`:

$ last -n 3|awk -F 'M' '{print $1}'
jiang pts/0 :0
jiang pts/0 :0
jiang pts/0 :0

awk有三个内建变量来表示处理的行有的数据信息:

NF 每一行拥有的字段总数

NR 目前awk所处理的是第几行的数据

FS 目前的分隔字符,默认是"空格"

可以使用>, <, >=, <=, ==, != 来做逻辑判断

grep, sed, awk的更多相关文章

  1. linux三剑客grep|sed|awk实践

    最好先学习正则表达式的基本用法,以及正则表达式BREs,EREs,PREs的区别 此坑待填 grep sed awk

  2. Linux三剑客grep/sed/awk

    grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color ...

  3. 【Linux】 字符串和文本处理工具 grep & sed & awk

    Linux字符串&文本处理工具 因为用linux的时候主要用到的还是字符交互界面,所以对字符串的处理变得十分重要.这篇介绍三个常用的字符串处理工具,包括grep,sed和awk ■ grep ...

  4. [svc]linux正则实战(grep/sed/awk)

    企业实战: 过滤ip 过滤出第二行的 192.168.2.11. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ine ...

  5. linux grep,sed,awk和diff的使用

    1:grep//显示行 # grep 'main' /home/myhome/a.c//将a.c含有main的行显示出来 # grep -v 'main' /home/myhome/a.c //显示除 ...

  6. Using of grep sed awk on Linux

    #This script is to parse data file: fun0() { ## [INFO1]a=1   b=2 c=3 [INFO2]a=7 b=8 c=9 [INFO3] a=x ...

  7. 5_find grep sed awk 详解

    find :查找文件系统中指定的文件.可以按文件名(-name)  权限(-perm) 归属人 查找. find   要查找文件的路径   表达式 *通配符  可以添加在文件名的任意位置 常用的例子( ...

  8. 【shell脚本练习】grep sed awk

    下面是简单学习之后做得练习题,如果有不对的或者说解题思路不好的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane ...

  9. grep sed awk 3个Linux中对文件内容操作的命令

    在学习Linux命令中,发现3个有关于文件内容操作的命令grep,sed和awk,在这里简单汇总这3个命令主要作用,在实际中找到最合适的情景应用,详细用法可以参考其他文章. 1.grep命令 主要作用 ...

随机推荐

  1. math --- CSU 1554: SG Value

    SG Value Problem's Link:   http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1554 Mean: 一个可重集合,初始为空,每 ...

  2. linq之where子句

    在Linq中,where子句主要是来指定筛选元素的逻辑条件.linq查询中where子句不是必须的,可以不包括where子句,也可以包含多个where子句,where子句中可以包含一个或多个bool类 ...

  3. 母版页 VS shtml—ASP.NET细枝末节(3)

    这算是html的重用吧? 摘自: http://www.cnblogs.com/mcad/p/4352665.html 网页很多地方长得一样,也有不一样的地方. 把网页中一样的地方,提取出来,形成一个 ...

  4. [转]在SqlServer 中解析JSON数据

      在Sqlserver中可以直接处理Xml格式的数据,但因为项目需要所以要保存JSON格式的数据到Sqlserver中在博客:Consuming JSON Strings in SQL Server ...

  5. 怎样解决asp.net.mvc上传附件超过长度问题?

    最近,在做一个上传附件功能,但是文件超过4M,就报上传的文件超过长度问题

  6. fibonacci数列的和取余(1)

    As we know , the Fibonacci numbers are defined as follows:  """" Given two numbe ...

  7. spring jdbcTemplate query

    1. spring jdbcTemplate query需要实现mapRow方法 package com.cdv.apolloagent.jdbc.dao.impl; import java.sql. ...

  8. 默认选中ComboBox的某一项

    如: 让它选中“统计今天”(控件Name为cobListTime) 方法: 1.cobListTime.Text = cobListTime.Items[0].ToString();//默认选中第一个 ...

  9. ahjesus fstab修改错误了如何修复

    fstab修改错误了如何修复   当你不小心把磁盘表输入错误以后,系统总是让你按ctrl+D重新启动或者输入密 码进入shell,你输入密码登陆后,   编辑文件是只读的,执行下面的命令后就可以编辑了 ...

  10. 写给java程序员的c++与java实现的一些重要细微差别

    0.其实常规的逻辑判断结构.工具类.文件读写.控制台读写这些的关系都不大,熟悉之后,这些都是灵活运用的问题. 学习c/c++需要预先知道的一个前提就是,虽然有ANSI C标准,但是每个c/c++编译器 ...