zoukankan      html  css  js  c++  java
  • Linux shell文本过滤

    正则表达式
    --概念:一种用来描述文本模式的特殊语法
    --由普通字符(例如:字符a到z),以及特殊字符(元字符,如/*?等)组成匹配的字符串
    --文本过滤工具在某种模式之下,都支持正则表达式
    --基本元字符集及其含义
        ^    只匹配行首
        $    只匹配行尾
        *    一个单字符后紧跟*,匹配0个或多个此单字符
        []    匹配[]内字符。可以使一个单字符,也可以是字符序列。可以使用"-"表示[]内字符序列范围,如用[1-5]代替[12345]
            用来屏蔽一个元字符的特殊含义。因为有时在shell中一些元字符有特殊含义。""可以使其失去应有意义
        .    匹配任意单字符
        pattern{n}    用来匹配pattern出现次数,n为次数,(这里的大括号需要转义,和javascript不同)
        pattern{n,}    含义同上,但次数最少为n
        pattern{n,m}    含义同上,但pattern出现次数在n与m之间
    --特殊:"^$"匹配空行    "^.$"匹配包含一个字符的行
    --shell中似乎没有javascript中的S,w等元字符
    xargs
    --对于find命令查找的文件列表,想使用grep命令查找指定文件,但是有时候文件太多了,超过了grep命令的上限,就有了可能报错
    --xargs的作用是:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,
    这样他可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去
    --常见用法: find . -name "*" | xargs grep "hostname" --注意:在find和grep中,如果不使用xargs,可能无法查出正确结果
    grep
    --功能:按照行方式处理文本
    --语法格式:    grep [选项]    基本正则表达式 [文件](没有文件也可以来自管道)
    --参数
        -n    显示匹配行及行号
        -v    显示不包含匹配文本的所有行
    --grep中的正则表达式不需要使用//
    --例如:grep "^2014&" 1.c  --在1.c文件中查找以2014开头并且以2014结尾的字符串
    awk
    --参数
        -F    指定分隔符
    --例子①:awk -F ":" '{print $1 "--" $3}' passwd.txt
        详解:'{print $1 "--" $3}',print $1打印第一列的数据,"--""--"来分割第一列和第三列数据,这里必须加双引号
    --②:awk -F ":" '$3>499 {print $1 "	" $3}' passwd
        详解:$3>499指的是第三列的值大于499的列
    --$0表示一行的所有数据
    --awk获取倒数第一个域$(NF-0),倒数第二个域是$(NF-1)
    awk多条件判断
    1.awk中的判断符号和条件测试中的判断符号是不同的,awk中只有"=","!=","<",">"
    2.awk中多条件的连接符是"&&"(与)和"||"(或)
    例如:awk -F " " '$2>=2 && $2<=5 {printf $0}' 1.c
    --表示筛选第二列中大于等于2并且小于等于5的数据
    sort
    sort -n -k7
    --"-n"按行排序,"-k[n]"按第n列升序排序
    sort -n -k7 -r
    --降序排列
    tail -[n]
    --从底下往上取n行
    head -[n]
    --从上往下取n行
    wc -c
    --显示总共有多少字符
    wc -l
    --显示总共有多少行
    sed
    --语法结构    sed options ... [script] ... [inputfile]
    --如果没有输入文件,则sed默认对标准输入进行处理(即键盘输入)。脚本命令是第一个不以"-"开始的参数
    --常用选项
        -n    静默输出
        -e    允许多个脚本指令被执行
        -i    直接修改源文件,经过脚本指令处理过的内容将被输出至源文件(源文件被修改,慎用)
    --常用用法
    --按照一个范围(第几行到第几行)。提取数据
    --sed的主要用法是编辑功能...对提取的数据,进行修改,替换,编辑,删除,插入等操作
    --sed通过读取读取文件内容,但一次仅读一行内容进行指令操作后输出,所以sed更适合处理大数据文件。
    --sed -n 'p' 文件名
      详解:打印文件中所有行,包括空行,"p"表示打印行数据
    $p表示最后一行;
    sed -n '$=' 获取最后一行的行号 --sed -n '3,/ddd/p' 文件名 详解:从第三行开始匹配,打印含有ddd的行,、 --sed -n '/^$/=' 文件名 详解:打印空行的行号,"="表示打印行号,不打印行数据 --sed多条指令的执行方法1 sed -n -e '3p' -e '/^$/=' 1.c 详解:通过仔细观察发现,如果第二行是空行,会先打印第二行的行号,再打印第三行, 这是因为sed是一行行的读取数据的 --sed多条指令执行方法2 sed -n '3p;/^$/=' 1.c 注意用分隔符""分开 --sed脚本操作选项 a(append) 追加 i(insert) 插入 d(delete) 删除 s(substitution) 替换 --例子: --sed '2a 大较好' 文件名 详解:向文本第二行后面追加"大家好"字符串(有换行问题) --sed '3i 大家好' 文件名 详解:向文本第三行前插入"大家好"字符串(有换行问题) --sed 's/匹配原来的字符串正则表达式/向替换的字符/g' 文件名 详解"s"表示是替换的意思,"g"表示全文的意思 --sed '3,4d' 文件名 详解:删除第三行到第四行的数据 --sed 's/hello//g' 文件名 详解:把全文的hello替换成空字符串
    --注意:sed语法中,如果需要使用shell变量,那么不能加"'"单引号,并且变量必须使用${}形式
    例如:ipcs | sed -n ${变量1},${变量2}p

  • 相关阅读:
    自动化测试工具Telerik Test Studio发布R1 2019|附下载
    DevExpress ASP.NET Core Controls v18.2新功能详解
    DevExpress WinForms使用教程:Diagram Control
    JDK1.8源码——java.util.Arrays 类
    JDK1.8源码——java.util.HashMap 类
    哈希表
    JDK1.8源码——java.lang.String 类
    HDU1811 Rank of Tetris (并查集)
    CF149D Coloring Brackets (区间dp)
    POJ2464 Brownie Points II(树状数组+思维)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6105613.html
Copyright © 2011-2022 走看看