zoukankan      html  css  js  c++  java
  • Shell-4-让文本飞

    1.正则表达式

    ^

    行起始标志

    $

    行尾标记

    .

    匹配任意一个字符

    [ ]

    匹配包含在[字符]之中的任意一个字符,coo[kl]匹配cookcool

    [^]

    匹配除[^字符]的任意一个字符

    [-]

    匹配[]中范围内任意一个字符

    ?

    匹配之前的项一次或0

    +

    匹配之前的项一次或多次

    *

    匹配之前的项0次或多次

    ()

    创建一个用于匹配的子串

    {n}

    匹配之前的项n

    {n,m}

    指定之前的项所必须匹配的最小次数和最大次数

    |

    交替-匹配|两边的任意一项

    转义符可以将上面的符号转义

    2.grep

    (1)搜索包含特定模式的文本行

    [root@cai tmp]# cat 1.txt 
    this is a test2
    11
    44
    33
    55
    55
    [root@cai tmp]# grep 3 1.txt 
    33
    也可以对多个文件进行搜索:grep 3 1.txt 2.txt 3.txt
    使用正则表达式必须使用egrep

    (2)要打印除某行之外所有行

    [root@cai tmp]# grep -v 3 1.txt 
    this is a test2
    11
    44
    55
    55

    (3)统计文本或文本中包含匹配字符串的行数

    [root@cai tmp]# grep -c 3 1.txt 
    1

    (4)打印包含匹配字符串的行数

    [root@cai tmp]# grep 3 -n 1.txt 
    4:33

    (5)搜索多个文件并找出匹配文本位于哪个文件中

    [root@cai tmp]# grep -l 3 1.txt 2.txt 
    1.txt
    2.txt

    (6)如果进行递归查询,可以使用

    grep “text” . -R -n

    (7)忽视样式中的大小写(grep -i pattern file)

    (8)用grep匹配多个样式

    grep -e “pattern1” -e “pattern2”

    (9)在grep搜索中指定或排除文件

    grep “main()” . -r --exclude “readne”

    (10)打印出匹配文本之前或之后的行

    要打印匹配某个结果之后的3行,可以使用-A选项

    [root@cai tmp]# seq 10|grep 5 -A 3
    5
    6
    7
    8

    要打印匹配某个结果之前的3行,可以使用-B选项

    [root@cai tmp]# seq 10|grep 5 -B 3
    2
    3
    4
    5
    要打印匹配某个结果之前以及之后的3行,使用-C选项
    [root@cai tmp]# seq 10|grep 5 -C 3
    2
    3
    4
    5
    6
    7
    8

    3.用cut按列切分文本

    cut -f 2,3 filename

    4.sed

    1)sed可以替换给定文本中的字符串
      sed ‘s/pattern/replace_string’ file2)在默认情况下,sed只会打印替换后的文本,要想保留同时更改,用-i选项
    sed -i ‘s/pattern/replace_string’ file3)如果想替换所有内容,在结尾加上参数g
    sed ‘s/pattern/replace_string/g’ file4)移除空白行
    sed ‘ /^$/d’ file5)直接在文件中进行替换
    sed ‘s/PATTERN/replacement’ -i filename
    (6)组合多个表达式
    sed ‘expression’ | sed ‘expression’
    =sed ‘expression;expression’
    =sed -e ‘expression’ -e ‘expression’

    5.awk

    脚本基本结构如下所示:
    awk ‘BEGIN{ print “start” } pattern {commands} END{print “end” } ’ file
    awk ‘BEGIN {statements} {statements} END { end statements}’

    6.统计特定文件中的词频

    #!/bin/bash
    #用途:计算文件中单词的词频
    
    if [ $# -ne 1 ];
    then
      echo "usage:$0 filename";
      exit -1
    fi
    
    filename=$1
    
    egrep -o "[[:alpha:]]+" $filename | 
    
    awk '{ count[$0]++ }
    END{ printf("%-14s%s
    ","word","count");
    for(ind in count)
    { printf("%-14s%d
    ",ind,count[ind]) ; }
    }'
    ~      
     [root@cai shell]# sh word_freq.sh /tmp/1.txt 
    word          count
    a             1
    this          1
    is            1

    7.按列合并多个文件(paste)

    [root@cai tmp]# paste 1.txt 2.txt 
    this is a test2    cairui
    11    xijinpng
    44    aiyinsitan
    33    
    55    
    55    

    8.打印文件或行中的第n个单词或列

    下面打印第5列
    awk ‘{ print $5 }’ filename

    9.打印行或样式之间的文本

    (1)[root@cai tmp]# seq 100|awk 'NR==4,NR==8'

    (2)4awk ‘NR==M,NR==N’ filename

    5

    6

    7

    8

  • 相关阅读:
    Semaphore使用
    不可变对象
    Java锁--Lock实现原理(底层实现)
    Lambda Expressions and Functional Interfaces: Tips and Best Practices
    注解的作用
    linux命令大全
    linux &和&&,|和||
    SpringCloud 商品架构例子(一)
    springcloud starter(一)
    dubbo(一)
  • 原文地址:https://www.cnblogs.com/caicairui/p/7284438.html
Copyright © 2011-2022 走看看