zoukankan      html  css  js  c++  java
  • Linux高级命令-sort、uniq、 cut、sed、grep、find、awk

    sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html

      功能:根据不同的数据类型进行排序

      格式:sort [-cMnrtk][源文件][-o 输出文件] 

      说明:

        如果有一个文件"1.txt",假如有一列数字,分别为1,2,2,3,5,4

        -n:   依照数值的大小排序 --> 数字以字符进行排序时,2比10大    cat 1.txt |  sort -n 

        -u: 在输出行中去除重复行   cat 1.txt | sort -u

        -r:反序排列  cat 1.txt | sort -r

        -o:将结果输出到源文件(如果使用sort -n 1.txt > 1.txt,将导致文件内容丢失  使用 sort -n 1.txt -o 1.txt)

        -t(分隔符),-k(区间数):确定排序的列  -->sort -nr -t":" -k 3 /etc/passwd  将文件的第三列以数字的形式进行f反向排序

     

    uniq(参考学习网站:http://blog.csdn.net/e421083458/article/details/37913181

      功能:读取输入文件,并比较相邻的行。可去除重复行。(使用前,需要用sort先进行排序)

      格式:uniq [-cdu] 文件

      说明:

        -c:在输出行前面加上每行在输入文件中出现的次数

        -d:仅显示重复行

        -u:仅显示不重复的行

        示例:cat /etc/passwd | awk -F":" '{print $7}'| sort |uniq -c  --> 查看passwd中解释器种类及数量

     

    cut(参考学习地址:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html

      功能:对文件进行内容选取,对所有行进行操作

      格式:cut [-bcdfn] 文件

      说明:

        -b :以字节为单位进行分割。【这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志】(数字/字母/符号,一个一个字节,汉子为三个字节 echo "好的" | cut -b 4-6

        -c :以字符为单位进行分割

        -d :自定义分隔符,只能是单一character。这个区分与awk,有时候awk更为方便。

        -f  :与-d一起使用,指定显示哪个区域。

        -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内

      示例:

        cat /etc/passwd | cut -d":" -f7 |sort | uniq   (查看/etc/passwd中所有用户地解释器种类有多少)

     

    sed(学习参考地址:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.htmlhttp://www.iteye.com/topic/587673

      功能:在线编辑器,自动编辑一个或多个文件,简化对文件的反复操作、编写转化程序等。不会改变原文件内容

           次处理一行数据,首先将数据放入临时缓冲区中,sed命令处理缓冲区中的内容,完成后输出到屏幕。后接着处理下一行,知道结尾

          地址:通过地址(数字)来指定编辑对应的行,以逗号分隔两个数字作为起始位置(含),例:1,5(第一行到第五行),$表示最后一行

      格式:sed [-nefr]  [动作]

      说明:

              -n:安静(silent)模式,     加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
              -e:多点编辑/命令,直接在命令列模式上进行 sed 的动作编辑
               -i:直接修改读取的文件内容,而不是输出到终端(修改原文件
               -f:直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作(不常用)
               -r:sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)(不常用)
              动作部分
              [n1,n2]动作
              n1、n2为操作的作用地址,$是行尾
              a:新增 ,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
              c:取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
              d:删除,因为是删除啊,所以 d 后面通常不接内容
              i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
              p:列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
              s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g
     
    示例:
              新增:sed '2a hello world' /etc/passwd:在第二行的后面新增一行;
                        sed '2,3a hhh' /etc/passwd   (会在第三行和第四行都会增加hhh)
              取代:sed '2,$c hhh' /etc/passwd    (第二行到最后一行被取代)
              删除:sed '2,$d' /etc/passwd    :删除第二行到最后一行 
              插入:sed '2i hhh' /etc/passwd  :第二行插入字符串,原第二行变成了第三行
                        sed '2,5i hhh' /etc/passwd :第二行到第五行中间都将插入字符串
              列印:sed -n '2,3p' /etc/passwd:将第2,3行内容输出
      补充:sed是常用正则表达式的一种命令,在此不做进一步深挖。可参考百度
     
      功能:General Regular Expression Parser,通用正则表达式的缩写是,一种文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。在grep的基础还有扩展了egrep/fgrep等信息
      格式:grep [-acinv] [--color=auto] '搜寻字符串' filename
      说明
    -a :将 binary 文件以 text 文件的方式搜寻数据
    -c :计算找到 '搜寻字符串' 的次数
    -i :忽略大小写的不同,所以大小写视为相同
    -n :顺便输出行号
    -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
    --color=auto :可以将找到的关键词部分加上颜色的显示喔
     
    -A(n):After,将查找的结果连后(n)行业显示出来
    -B(n):Before,作用参上
    -C(n):Center,作用参上
     
    正则表达式
                   [ ]:匹配任意一个字符   -->grep -n "[1-9][3-9]"  匹配以1-9任意数据开始,后面跟3-9任意一个数字,则数据范围在13~99之间
                   [^]:反向选择
                   ^、$:开始、结尾符, -->grep -n "^root.*root$" 匹配以root开头并以root结尾的行
                   .:至少有任意一个字符
                   ?:任意一个字符,0或1个(需要使用grep -E
                   *:重复前一个字符(串)n(n>=0)个
                   +:重复前一个字符1次以上(需要使用grep -E) 
      示例
        grep -A1 -n --color=auto "^hd.*/bash$" /etc/passwd  >>以hd开始,/bash结尾,输出行数、对应行及下一行并高亮。
     
      功能:目录结构中搜索文件,并执行指定的操作,涉及到较多搜索时,放到后台进行(命令结尾添加:&)
      格式:find pathname [选项]
      说明:
         -name :按照文件名查找文件
         -type:依据文件类型查找,
                   f:普通文件
                   d:目录
                   l:符号链接文件
                   b/c:块/字符设备文件
                   P:管道文件
         -print:将匹配的文件输出到标准输出(-print0:不换行)
         -size:匹配文件大小(K/M/G)
         -perm:(permission)匹配文件权限进行查找
                   示例:find ~ -perm 755 -type d -name "demon*" (在家目录下查找权限是755以demon开头的目录)
         -user/-group :匹配文件属主/组主进行文件查询。
                   示例:find ~ -user sunhuaj -name "hehe" (查找家目录下属主为sunhuaj名称为hehe的文件)
         文件元数据:accesstime、modifytime、changetime
          +:时间之前;-:时间之内(最近时间内)
         -ctime:+/-n 根据文件的创建时间进行查找 【以天维度,跨度大;-cmin,分钟维度】
         -atiime:+/-根据文件的访问时间进行查找【同上;-amin,分钟维度】
         -mtime:+/-根据文件的修改时间进行查找【同上;-mmin分钟维度】
         -exec  cmd {} ;:find命令对匹配的文件执行该参数所给出的shell命令,注意“{}”与“;”有空格
      示例:
         1、查找一天以内创建的1小时之前修改过的大于3M的文件
         find ~ -ctime -1 -mmin 60 -size +3M -print
         2、查找空文件/目录
         find / -empty
         3、查看目标文件的详细信息
         find ~ -name "*shj*" -exec ls -l {} ;
     
      功能:强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
      格式:awk '{pattern + action}' {filenames}
         pattern:表示 AWK 在数据中查找的内容,为要表示的正则表达式,用斜杠括起来
         action:找到匹配内容时所执行的一系列命令。
         说明:花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组
      
    示例:
         a、last -n 5 | awk '{print $1}':显示最近登录的五个账号
         awk工作流程是这样的:读入有' '换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推
     
         b、cat /etc/passwd | awk -F":" '{print $1}' :只显示/etc/passwd的用户
              cat /etc/passwd | awk -F":" '{print $1" "$7}' :显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
     
         c、cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
              awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作
     
         d、cat  /etc/passwd | awk '/root/' :搜索有关键字rootde行
     
         e、 awk -F: '/root/{print $7}' /etc/passwd:搜索/etc/passwd有root关键字的所有行,并显示对应的shell

    sort(参考学习网站:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html

      功能:根据不同的数据类型进行排序

      格式:sort [-cMnrtk][源文件][-o 输出文件] 

      说明:

        如果有一个文件"1.txt",假如有一列数字,分别为1,2,2,3,5,4

        -n:   依照数值的大小排序 --> 数字以字符进行排序时,2比10大    cat 1.txt |  sort -n 

        -u: 在输出行中去除重复行   cat 1.txt | sort -u

        -r:反序排列  cat 1.txt | sort -r

        -o:将结果输出到源文件(如果使用sort -n 1.txt > 1.txt,将导致文件内容丢失  使用 sort -n 1.txt -o 1.txt)

        -t(分隔符),-k(区间数):确定排序的列  -->sort -nr -t":" -k 3 /etc/passwd  将文件的第三列以数字的形式进行f反向排序

     

    uniq(参考学习网站:http://blog.csdn.net/e421083458/article/details/37913181

      功能:读取输入文件,并比较相邻的行。可去除重复行。(使用前,需要用sort先进行排序)

      格式:uniq [-cdu] 文件

      说明:

        -c:在输出行前面加上每行在输入文件中出现的次数

        -d:仅显示重复行

        -u:仅显示不重复的行

        示例:cat /etc/passwd | awk -F":" '{print $7}'| sort |uniq -c  --> 查看passwd中解释器种类及数量

     

    cut(参考学习地址:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html

      功能:对文件进行内容选取,对所有行进行操作

      格式:cut [-bcdfn] 文件

      说明:

        -b :以字节为单位进行分割。【这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志】(数字/字母/符号,一个一个字节,汉子为三个字节 echo "好的" | cut -b 4-6

        -c :以字符为单位进行分割

        -d :自定义分隔符,只能是单一character。这个区分与awk,有时候awk更为方便。

        -f  :与-d一起使用,指定显示哪个区域。

        -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内

      示例:

        cat /etc/passwd | cut -d":" -f7 |sort | uniq   (查看/etc/passwd中所有用户地解释器种类有多少)

     

    sed(学习参考地址:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.htmlhttp://www.iteye.com/topic/587673

      功能:在线编辑器,自动编辑一个或多个文件,简化对文件的反复操作、编写转化程序等。不会改变原文件内容

           次处理一行数据,首先将数据放入临时缓冲区中,sed命令处理缓冲区中的内容,完成后输出到屏幕。后接着处理下一行,知道结尾

          地址:通过地址(数字)来指定编辑对应的行,以逗号分隔两个数字作为起始位置(含),例:1,5(第一行到第五行),$表示最后一行

      格式:sed [-nefr]  [动作]

      说明:

              -n:安静(silent)模式,     加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
              -e:多点编辑/命令,直接在命令列模式上进行 sed 的动作编辑
               -i:直接修改读取的文件内容,而不是输出到终端(修改原文件
               -f:直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作(不常用)
               -r:sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)(不常用)
              动作部分
              [n1,n2]动作
              n1、n2为操作的作用地址,$是行尾
              a:新增 ,a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
              c:取代,c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
              d:删除,因为是删除啊,所以 d 后面通常不接内容
              i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
              p:列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
              s :取代,可以直接进行取代的工作,通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g
     
    示例:
              新增:sed '2a hello world' /etc/passwd:在第二行的后面新增一行;
                        sed '2,3a hhh' /etc/passwd   (会在第三行和第四行都会增加hhh)
              取代:sed '2,$c hhh' /etc/passwd    (第二行到最后一行被取代)
              删除:sed '2,$d' /etc/passwd    :删除第二行到最后一行 
              插入:sed '2i hhh' /etc/passwd  :第二行插入字符串,原第二行变成了第三行
                        sed '2,5i hhh' /etc/passwd :第二行到第五行中间都将插入字符串
              列印:sed -n '2,3p' /etc/passwd:将第2,3行内容输出
      补充:sed是常用正则表达式的一种命令,在此不做进一步深挖。可参考百度
     
      功能:General Regular Expression Parser,通用正则表达式的缩写是,一种文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。在grep的基础还有扩展了egrep/fgrep等信息
      格式:grep [-acinv] [--color=auto] '搜寻字符串' filename
      说明
    -a :将 binary 文件以 text 文件的方式搜寻数据
    -c :计算找到 '搜寻字符串' 的次数
    -i :忽略大小写的不同,所以大小写视为相同
    -n :顺便输出行号
    -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
    --color=auto :可以将找到的关键词部分加上颜色的显示喔
     
    -A(n):After,将查找的结果连后(n)行业显示出来
    -B(n):Before,作用参上
    -C(n):Center,作用参上
     
    正则表达式
                   [ ]:匹配任意一个字符   -->grep -n "[1-9][3-9]"  匹配以1-9任意数据开始,后面跟3-9任意一个数字,则数据范围在13~99之间
                   [^]:反向选择
                   ^、$:开始、结尾符, -->grep -n "^root.*root$" 匹配以root开头并以root结尾的行
                   .:至少有任意一个字符
                   ?:任意一个字符,0或1个(需要使用grep -E
                   *:重复前一个字符(串)n(n>=0)个
                   +:重复前一个字符1次以上(需要使用grep -E) 
      示例
        grep -A1 -n --color=auto "^hd.*/bash$" /etc/passwd  >>以hd开始,/bash结尾,输出行数、对应行及下一行并高亮。
     
      功能:目录结构中搜索文件,并执行指定的操作,涉及到较多搜索时,放到后台进行(命令结尾添加:&)
      格式:find pathname [选项]
      说明:
         -name :按照文件名查找文件
         -type:依据文件类型查找,
                   f:普通文件
                   d:目录
                   l:符号链接文件
                   b/c:块/字符设备文件
                   P:管道文件
         -print:将匹配的文件输出到标准输出(-print0:不换行)
         -size:匹配文件大小(K/M/G)
         -perm:(permission)匹配文件权限进行查找
                   示例:find ~ -perm 755 -type d -name "demon*" (在家目录下查找权限是755以demon开头的目录)
         -user/-group :匹配文件属主/组主进行文件查询。
                   示例:find ~ -user sunhuaj -name "hehe" (查找家目录下属主为sunhuaj名称为hehe的文件)
         文件元数据:accesstime、modifytime、changetime
          +:时间之前;-:时间之内(最近时间内)
         -ctime:+/-n 根据文件的创建时间进行查找 【以天维度,跨度大;-cmin,分钟维度】
         -atiime:+/-根据文件的访问时间进行查找【同上;-amin,分钟维度】
         -mtime:+/-根据文件的修改时间进行查找【同上;-mmin分钟维度】
         -exec  cmd {} ;:find命令对匹配的文件执行该参数所给出的shell命令,注意“{}”与“;”有空格
      示例:
         1、查找一天以内创建的1小时之前修改过的大于3M的文件
         find ~ -ctime -1 -mmin 60 -size +3M -print
         2、查找空文件/目录
         find / -empty
         3、查看目标文件的详细信息
         find ~ -name "*shj*" -exec ls -l {} ;
     
      功能:强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
      格式:awk '{pattern + action}' {filenames}
         pattern:表示 AWK 在数据中查找的内容,为要表示的正则表达式,用斜杠括起来
         action:找到匹配内容时所执行的一系列命令。
         说明:花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组
      
    示例:
         a、last -n 5 | awk '{print $1}':显示最近登录的五个账号
         awk工作流程是这样的:读入有' '换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推
     
         b、cat /etc/passwd | awk -F":" '{print $1}' :只显示/etc/passwd的用户
              cat /etc/passwd | awk -F":" '{print $1" "$7}' :显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
     
         c、cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
              awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作
     
         d、cat  /etc/passwd | awk '/root/' :搜索有关键字rootde行
     
         e、 awk -F: '/root/{print $7}' /etc/passwd:搜索/etc/passwd有root关键字的所有行,并显示对应的shel
  • 相关阅读:
    install kde in ubuntu
    Upgrade to or Install Cinnamon 2.4 in Ubuntu
    enjoy dollar vs cash dollar
    opencv linux
    高频交易都有哪些著名的算法
    wpf
    opencv mat flags含义
    gphoto2 canon eos450d
    gphoto2
    task optimization之superglue分析
  • 原文地址:https://www.cnblogs.com/sx66/p/11953290.html
Copyright © 2011-2022 走看看