zoukankan      html  css  js  c++  java
  • mac 文本处理命令分享

    mac 文本处理命令分享

    mac 文本处理命令分享

    1 sed

    默认sed命令只是对标准输出做变更,不会影响到源文件,但是如果加了-i之后,会变更源文件。mac中的-i参数使用和linux有差异。后面只对mac的命令做说明。
    -i '' i后加上备份文件名称才能影响到源文件。''默认是和原文件名相同,不产生备份文件。
    
    本测试的文件为csophys。其中的内容如下:
    cat csophys
    I am the first line!
    line second is me.
    

    1.1 文本查找替换

    sed -i '' 's/line/LINE/' csophys
    

    1.2 文本插入

    a在目标行之后插入,i在目标行之前插入。

    sed '1 a 
    insert
    ' csophys
    
    sed '1 i 
    insert
    ' csophys
    
    sed '$line a
    xxxx
    ' file
    

    $line这是目标行,也可以用正则来定位所有匹配的行。

    sed '/line/ i 
    insert
    ' csophys
    

    也可以直接在匹配行之后插入其他文件的内容,比如:

    sed '/first/r command.org' csophys
    

    1.3 文本行删除

    删除文本中的行

    sed '/se.*/d' csophys
    

    1.4 执行sed脚本

    cat sed.rule
    s/first/FIRST/
    s/second/SECOND/
    
    sed -f sed.rule csophys
    I am the FIRST line!
    line SECOND is me.
    

    更多命令可以参考 man sed。

    2 awk

    awk '{pattern + action}' {filenames}
    

    awk是在每行处理文本的时候,默认按照空格隔离每一个域,对每一个域做处理。也可以直接通过在awk 后加 -F. 指定分隔符。

     ls -l | awk '/rw/{print "第三列:"$3"	|	""第5列:"$5}'
    
    第三列:csophys | 第5列:3154
    第三列:csophys | 第5列:42
    第三列:csophys | 第5列:5253
    第三列:csophys | 第5列:32
    第三列:csophys | 第5列:35
    
    ls -l | awk 'BEGIN{OFS="&";count=10;for(i=0;i<3;i++)print"开始"}/rw/{print ++count,NR,$3,$5}END{print "结束"}'
    开始
    开始
    开始
    11&2&csophys&23
    12&3&csophys&3675
    13&4&csophys&42
    14&5&csophys&5253
    15&6&csophys&32
    16&7&csophys&35
    结束
    

    awk中可以使用printf来格式化输出,也可以使用if判断语句

    ls -l | awk 'BEGIN{OFS="&";count=10;for(i=0;i<3;i++)print"开始"}/rw/{if(NR>3) printf("printf:%s,%s,%s,%s
    ",++count,NR,$3,$5)}END{print "结束"}'
    <i++)print"开始"}/rw/{if(NR>3) printf("printf:%s,%s,%s,%s
    ",++count,NR,$3,$5)}END{print "结束"}'
    开始
    开始
    开始
    printf:11,4,csophys,42
    printf:12,5,csophys,5253
    printf:13,6,csophys,32
    printf:14,7,csophys,35
    结束
    

    awk 内部变量名的含义如下:

    变量名    含义 
    ARGC   命令行变元个数 
    ARGV   命令行变元数组 
    FILENAME   当前输入文件名 
    FNR   当前文件中的记录号 
    FS   输入域分隔符,默认为一个空格 
    RS   输入记录分隔符 
    NF   当前记录里域个数 
    NR   到目前为止记录数 
    OFS   输出域分隔符 
    ORS   输出记录分隔符
    

    更加强大的功能参考 man awk。 或者参考博客:

    1. http://www.zsythink.net/archives/tag/awk/
    2. https://www.tutorialspoint.com/awk/awk_quick_guide.htm

    3 sort

    sort [-ntkr] 文件名 #-n 采用数字排序 #-t 指定分隔符 #-k 指定第几列 #-r 反向排序

    ls -l | awk '/rw/{print $5}' | sort -n -r
    5253
    1608
    42
    35
    32
    
    ls -l | sort -k 5 -n -r
    -rw-r--r--  1 csophys  staff  5253  9  3 11:25 passwd
    -rw-r--r--  1 csophys  staff  1817  9  3 22:29 command.org
    -rw-r--r--  1 csophys  staff    42  9  1 23:14 csophys
    -rw-r--r--  1 csophys  staff    35  9  3 11:37 test
    -rw-r--r--  1 csophys  staff    32  9  2 22:59 sed.rule
    total 48
    
    ls -l | sort -k 2 -t ":"
    total 48
    -rw-r--r--  1 csophys  staff    42  9  1 23:14 csophys
    -rw-r--r--  1 csophys  staff  5253  9  3 11:25 passwd
    -rw-r--r--  1 csophys  staff  2157  9  3 22:31 command.org
    -rw-r--r--  1 csophys  staff    35  9  3 11:37 test
    -rw-r--r--  1 csophys  staff    32  9  2 22:59 sed.rule
    

    4 uniq

    uniq一般需要和sort配合使用。uniq 的作业是删除连续相同的行,所以在sort之后使用效果很好。-c 参数可以打印出重复的次数。

    ls -l | awk '/rw/{print $3}' 
    csophys
    csophys
    csophys
    csophys
    csophys
    
    ls -l | awk '/rw/{print $3}' | uniq -c
    5 csophys
    

    5 其他

    1. cut。cut可以截取指定分隔符隔开后的具体某一列或者某几列。
    2. tr。tr命令主要作用是在于文本转换或者删除
    3. paste。paste作用是在于按照指定的分隔符按照行进行合并
    4. split。使用split可以实现文件的分割,支持按照行数分割和按照大小分割两种模式。

    Author: 陈胜

    Created: 2017-09-04 Mon 23:16

    Validate

  • 相关阅读:
    11.11 开课二个月零七天(ajax和bootstrp做弹窗)
    11.10 (下午)开课二个月零六天(ajax验证用户名,ajax调数据库)
    获取当月时间段。
    JavaScript prototype 使用介绍
    JavaScript arguments对象
    JS,DOM对象新知识点整理
    JS清除选择的内容
    限制显示内容,超出用省略号代替的方法
    封装php连接数据库返回方法
    div跟随鼠标移动代码
  • 原文地址:https://www.cnblogs.com/csophys/p/7476394.html
Copyright © 2011-2022 走看看