zoukankan      html  css  js  c++  java
  • grep, sed, awk

    这几个工具是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 目前的分隔字符,默认是"空格"
    可以使用>, <, >=, <=, ==, != 来做逻辑判断

  • 相关阅读:
    postman的本地安装教程
    06-Hibernate中的持久化类
    05-Hibernate的核心API及使用c3p0连接池
    04-Hibernate的常见配置
    03-Hibernate的入门
    02-Hibernate的日志记录
    01-Hibernate框架的概述
    15-struts2 提供的异常处理
    14-struts2的表单标签
    13-struts2中json插件使用
  • 原文地址:https://www.cnblogs.com/xiaojiang1025/p/5859150.html
Copyright © 2011-2022 走看看