zoukankan      html  css  js  c++  java
  • Linux基础——常用命令

    find /grep /xargs /sort /uniq /tr /cut /paste /sed /awk......待续......

    1.find

    名字查找:
    find . -name file    #eg: find -name *txt
    
    正则查找:
    find . -regex "pattern"    #eg: find -regex ".*\.txt"
      -iregex:正则忽略大小写
    
    反查找:
    find . ! -name "*.txt"

    按类型查找:
    find . -type d
      d: 目录
      f:文件

    按时间查找:
    find . -atime 7 -type f
      atime:访问时间(默认天d)
      mtime:修改时间
      ctime:变化时间

    按大小查找:
    find . -type f -size +2k #+号大于,-号小于
      k,M,G

    按权限查找:
    find . -type f -perm 644

    按用户查找:
    find . -type f -user XX

    搭配后续命令:
    find . -type f -name ".swp" -delete #删除当前目录下所有的swp文件
    find . -type f -mtime +10 -name "*.txt" -exec cp {} otherDir \
      #exec执行动作,{}表查找匹配到的每一个对象,\续行符
      #eg. -exec ./run.sh {} \

    print:
    find . -name "*.txt" -print0
    #输出./2.txt./3.txt./1.txt     => 加上 -print0 参数表示find输出的每条结果后面加上 '\0' 而不是换行

    2.grep

    grep 'pattern' file  

      -o:只输出匹配文本行
      -v:只输出非匹配行
      -c:统计包含文本次数
      -n:打印匹配行号
      -i:忽略大小写匹配
      -r/R:递归匹配 #eg. grep -nr 'class' 当前目录所有匹配class的文件
      -e:匹配多个模式 #eg. grep -e 'class' -e 'genus' file

    匹配多个字符
      任意字符:
      egrep 'word|wore' file
      grep -E 'word|wore' file
      grep 'word\|wore' file
      同时满足:
      grep word1 file.txt | grep word2

    -w:字符串精确匹配
      grep -w '26' file #精确匹配26,不会匹配26a,262等,此法不能用于sed
      grep '\<26\>' file #效果同上,可移植到sed中,sed 's/\<0\>/NA/g' file
        (注意:0左右的.,;等符号仍会变为NA,如0.023替换为NA.023,最好加上边界符\b)
          echo 0.023 |sed 's/\\b\<0\>\\b/NA/g'

    ls -l |grep msms

    3.xargs


    传参命令(因为很多命令不支持管道来传参),xargs实现的是将管道传输过来的stdin进行处理然后传递到命令的参数位上。

    echo '--help' | cat   等价于  --help
    echo '--help' | xargs cat    等价于 cat --help
    echo 'test.c test.cpp' | xargs cat  等价于 cat test.c test.cpp
    xargs常与其他命令组合使用,如grep, find

    eg:
    find /sbin -perm +700 |ls -l  错误
    find /sbin -perm +700 |xargs ls -l  正确 cat file.txt |xargs #将多行输出变为单行输出
    cat single.txt |xargs -n 3 #将单行变为多行输出(每行3个字段)

    xargs的作用不仅仅限于简单的stdin传递到命令的参数位,它更大的作用是可以将stdin或者文件stdin分割成批,每个批中有很多分割片段,然后将这些片段按批交给xargs后面的命令进行处理。

    xargs处理的顺序:先分割,再分批,然后传递到参数位。

    分割   -d:定义定界符(默认空格,多行定界符为\n)
          echo '11@22@33' | xargs -d '@' echo #给echo传递了3个参数   
    -0:指定\0为输入定界符(一般与find连用)     
          find fir -type f -name "*.pl" -print0 |xargs -0 wc -l #统计程序行数

    分批   -n:指定输出为多行(参数)
          echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
          #分割为10个参数,每次传递3个参数(要执行4次才能传递完参数),等价于:
            echo 11 22 33
            echo 44 55 66
            echo 77 88 99
            echo 0

          -E:不指定参数,注意只在不指定-d参数的时候有效
          echo '11 22 33' | xargs -E '33' echo
          #输出11 22

    执行 -p:询问是否执行命令
          echo '11@22@33' | xargs -p -d '@'  echo
          ?...y #输入y执行

    Ref: https://www.cnblogs.com/wangqiguo/p/6464234.html

    4.sort

    -n:按数字排序
    -d:按字母排序
    -r:逆序(大->小)
    -k:加数字,指定列排序
    -b:忽略前导空白符(如空格)
        
            sort -nrk 2 data.txt
            sort -bd data.txt

    5.uniq

    消除重复行,常与sort连用
    sort test.txt |uniq
    
    -c:统计各行次数
        sort data.txt |uniq -c
    -d:打印重复行
        sort data.txt |uniq -d
    -u:打印非重复行
       sort data.txt |uniq -u

    6.tr

    替换
        cat file |tr '\t' ' ' 
    
    删除 -d
        cat file |tr -d '0-9'  #删除所有数字
    
    补集 -c
        cat file |tr -cd '0-9\n'  #删除所有非数字

    压缩 -s
      cat file |tr -s ' ' #压缩空格(最常用),即多个空格只保留第一个
      压缩制表符 '\t'


    大小写转换:cat test.txt |tr '[:lower:]' '[:upper:]'


    7.cut

    --complement:取补集
      cut -f3 --complement file #取除第三行外的所有列

    -d:制定分隔符
      cat -f2 -d";" file

    分隔单位:
      -f:以字段为单位
      -b:以字节为单位
      -c:以字符为单位

    取值范围:
      n-:n到结尾
      -m:开始到m
      n-m:n到m

    eg:
      cut -c-2 file  #打印前2个字符
      cut -c2- file  #从第2个字符开始打印(包含第2个)


    8.paste

    -d:指定分隔符(默认为制表符)
        paste file1 file2 -d ","


     

    9.sed

    -g:全局替换
        seg 's/text/replace_text/g' file
    
    -i:直接替换
        seg -i 's/text/repalce_text/g' file
    
    -d:删除
      sed 's/^$/d' file #删除空白行

    替换换行符
    sed ':label;N;s/\n/,/;t label' #将换行符替换为“,”
      Ref:http://workingxiaolong.lofter.com/post/6b719_e32bc11
      sed 's/Helicobacter.*//g;s/Sequence.*//g'
        替换单词后面的全部内容(包括特殊符号),注意点号不可少

    数字匹配替换
    [0-9]\+ #至少1个,+要转义
    [0-9]* #至少0个,*不需转义

    字符串替换
    [a-zA-Z]\+
    [a-zA-Z]*

    转义:
      一般的特殊字符要转义 _ -  ->  +
      各种括号视情况而定,表字符串本身时需要转义

    打印行:
      sed -n '1p;10p' file #打印第一行和第十行
      sed -n '1,10p' file #打印1-10行
      sed -n '1,5p;9p' test.txt #打印1-5行及第9行

    删除行:
      sed '/abc/d;/efg/d' file #删除含字符串"abc"或“efg"的行
      sed '/^CON/d;/^REV/d' proteinGroups.txt

    添加列:
      sed  'N;2atest1 test2' file # 第2行后添加一行(即第3行为test1 test2)
      sed 'N;2itest1 test2' file # 第1行前添加一行(即第1行为test1 test2),i前的数值至少为2
    更易理解的方法:
      sed  '1 i\test1 test2' test.txt #在原第一行添加一行
      sed  '1 a\test1 test2' test.txt #在原第一行添加一行

    10.awk


    基本概念:

    record:记录(行)
    
    field:字段(列)

    基本结构:

    awk ' BEGIN{ statements1 } {statements2} END{ statements3 } '

    工作方式:
      执行begin 1,再一行行读入重复执行2,最后执行end 3。

    awk ' {print NR}' file  #打印每一行行号
    
    awk ' END {print NR}' file  #打印最后一行行号

    特殊字符:

    常用:
      $0,$1,$2
      -F:设置分隔符(默认空格),-F'\t' -F:   NR:当前行号   NF:当前行的字段(列)   FNR:多个文件时,每处理一个新文件都从1开始计起(而NR会累加)
    其他:
      RS:行分隔符(默认换行符\n)
      ORS:输出当前行分隔符,与RS互为逆向/替换
      FS:列分隔符
      OFS:输出列分隔符(常用),与FS互为逆向/替换
        awk 'BEGIN{ FS="----";OFS="\t" }{ print $1,$2,$3 }' filename

    ref: https://www.cnblogs.com/fhefh/archive/2011/11/16/2251656.html

    对行进行过滤:

    awk 'NR<=5' file   #打印前5行,同head
    awk 'NR==1,NR==4{print}' file   #打印第1和4行
    awk '/linux/'  file  #打印匹配行
    awk '!/linux/' file  #打印非匹配行
    awk '/start_/, /end_/' file #打印两者(第一个)之间的行
  • 相关阅读:
    解决Mac笔记本电脑自带录屏软件没有声音问题
    pip安装包后Import的时候提示找不到的解决方案
    Photoshop怎么给图片添加简介信息或者版权信息
    [2021/08/06]Ubuntu20 安装指定小版本Mysql(本文示例mysql8.0.18)
    Springboot2.3.5 实现JWT授权验证并针对不同用户实现多个拦截器
    搭建集群步骤注意事项
    docker服务程序网络排查
    网络分层协议集合分析
    括号串
    抢救实验数据
  • 原文地址:https://www.cnblogs.com/jessepeng/p/9863861.html
Copyright © 2011-2022 走看看