博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux基础——常用命令
阅读量:4676 次
发布时间:2019-06-09

本文共 4752 字,大约阅读时间需要 15 分钟。

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   等价于  --helpecho '--help' | xargs cat    等价于 cat --helpecho '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:

 

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:
  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:

 

对行进行过滤:

awk 'NR<=5' file   #打印前5行,同headawk 'NR==1,NR==4{print}' file   #打印第1和4行awk '/linux/'  file  #打印匹配行awk '!/linux/' file  #打印非匹配行 awk '/start_/, /end_/' file  #打印两者(第一个)之间的行

 

转载于:https://www.cnblogs.com/jessepeng/p/9863861.html

你可能感兴趣的文章
ZOJ Problem Set - 2165 Red and Black
查看>>
Qt 程序运行图标
查看>>
matlab Cplex使用
查看>>
(转)[unity3d]easytouch的使用
查看>>
Pascal's Travels
查看>>
Microsoft 家族新成员 Datazen 移动BI 介绍
查看>>
linq to entity GroupBy多个字段
查看>>
php中mysqli 处理查询结果集的几个方法
查看>>
二叉树遍历 空间复杂度为O(1)
查看>>
关于排序
查看>>
bzoj 3874: [Ahoi2014&Jsoi2014]宅男计划
查看>>
记录-Hibernate+servlet实现简单的增、删、查、改
查看>>
Uncaught TypeError: Cannot read property 'length' of null
查看>>
正在学习的路上
查看>>
又识用例图
查看>>
面试题思考: 什么是事务(ACID)?
查看>>
C# 实现保留两位小数的方法
查看>>
web前端面试的自我介绍
查看>>
朴素贝叶斯算法的实例
查看>>
Immunity Debugger
查看>>