cat、tac、more、less、head、tail、cut、sort、job、uniq、wc、diff、tr、sed、grep、awk

cat命令

    选项

    -n 显示行号

    -E 显示行结束符 (Linux系统的文本文件的结束符是$, windows系统的文本文件的结束符是$+Enter)

    -T 显示制表符

    -A  show-all

tac命令    反过来显示文本内容

more命令

                

    内部指令

        空格键   滚动到下一屏内容

        Enter键    滚动到下一行内容

        B键        向上滚动一屏内容

        Q键        退出       

less命令         

     内部指令和vim内部指令一样

head命令

       选项 

       -n<数字>:指定显示头部内容的行数;也支持 head -NO. FILENAME


tail命令

      -n<数字>:指定显示尾部内容的行数;也支持 head -NO. FILENAME

      -f      动态显示文件尾部内容变化(监视日志文件)  

cut命令

    -d:指定字段的分隔符,默认的字段分隔符为空格

    -f:显示指定字段的内容;

job命令 

sort命令(不对源文件做处理只是显示排序,依据ASII表中的次序升序排列)        

      -n:依照数值的大小排序; 

      -d 按字典顺序排序

      -o<输出文件>:将排序后的结果存入制定的文件;

      -r:以相反的顺序来排序;

      -t<分隔字符>:指定排序时所用的栏位分隔字符

      -k  选择以哪个区间进行排序。

     -u 排序之后相同行只显示一次

     -f  排序时忽略字符大小写

     

uniq命令       (只处理相邻的重复行)

        -d    只显示重复的行

        -c     显示重复行的次数

wc命令 (word count)

        -c    统计文本中的字节

        -l    统计文本中的行数

        -w    统计文本中的单词数

        -L      统计最长一行包含多少个字符

diff  vim -d 或 vimdiff   比较两个文件内容  )

 diff [OPTION] 文件1 文件2

    -q  仅显示有无差异,不显示详细的信息

    -c  显示全文内文,并标出不同之处

    -b  不检查空格字符的不同

    -B    不坚持空白行

    -r    比较子目录中的文件

tr命令    (字符处理命令)用于转换或删除字符

        tr [OPTION]...    set1   [set2]

        -d    删除出现在字符集中的所有字符

grep,egrep,fgrep-不支持正则表达式

根据模式搜索文本,并将符合模式的文本行显示出来 

Pattern: 文本字符和正则表达式的元字符组合而成的匹配条件

  grep [OPTIONS] PATTERN [FILE...]

        -i   ignore  忽略大小写

        --color 高亮颜色显示

        -v 取反

       R, -r, –recursive  在某一目录下递归[所有子目录]查找某一字串:

        -o 只显示被模式匹配的关键字符串

        -E 使用扩展正则表达式

        -A  n  显示匹配到的行及其后面的n行  after 

        -B   n    显示匹配到的行及其前面的n行  before

        -C    n    显示匹配到的行及其前后的n行 context

基本正则表达式  REGEXP  REGular EXPression

    

元字符:

        . :匹配任意单个字符

    []    匹配指定范围内的任意单个字符

    [^]  匹配指定范围外的任意字符

    字符集合:      [:digit:]    [:lower:]    [:upper:]   [:alpha:]    [:alnum:]    [:space:]    [:punct:]

     

匹配次数:(贪婪模式-尽可能长的匹配) 

         ?:匹配其前面字符0或1次

         *:匹配其前面的字符任意次数    

       .* : 匹配任意长度的任意字符(.*表示任意多个任意单个字符,即任意字符)

  \{m,n\}: 匹配其前面的字符至少m次,至多n次 (\{m,\} 表示至少出现m次  \{,n\} 表示最多出现n次  \{Y\} 表示出现Y次)

  

位置锚定:

           ^: 锚定行首,此字符后面的任意内容必须出现在行首

           $: 锚定行尾,此字符前面的任意内容必须出现在行尾

         ^$: 空白行

        \<或\b 锚定词首,其后面的任意字符必须作为单词首部出现   

        \>或\b 锚定词尾,其前面的任意字符必须作为单词尾部出现

   

 分组    \(KEY\) KEY看做一个整体

                后向引用

                    \1    引用第一个左括号以及与之对应的右括号所包括的所有内容

                    \2    引用第二个左括号以及与之对应的右括号所包括的所有内容

                   &    引用模式匹配整个串 

   

扩展正则表达式

            字符匹配 次数匹配以及其他和基本正则表达式相同

            不同的如下:

                   + 匹配其前面的字符一次或多次

                {m,n}  匹配其前面的字符至少m次,至多n次 (不需要大括号)

                ()分组 (不需要斜线转义)

                   |   或者 ( a | b 表示a 或者b字符串  表示竖线的左边或右边  整体

                        

sed   ( Stream EDitor)

    sed 基本用法;(逐行处理,默认不修改原文件,仅对模式空间中的数据做处理,处理结束后,将模式空间                  打印至屏幕)

          sed [OPTIONS] ‘AddressCommand’ file ...

              -n 静默模式,不再默认显示模式空间的内容

              -i 直接修改原文件

              -e 多项使用 -e SCRIPT -e SCRIPT

              -f /PATH/TO/SED_SCRIPT

              -r 支持扩展正则表达式

              Address:

              1、StartLine,EndLine

                  1,100

                  $: 最后一行

              2、/RegExp/

                  /^root/ 以root为开头的行

              3、/pattern1/,/pattenrn2/ 第一次被pattern1匹配到的行开始,至第一次被pattenrn2匹配到的行结束,这中间的所有行

              4、LineNumber

                  指定的行

              5、StartLine,+N

                  从StartLine开始,向后的N行

              Command:

                  d     删除匹配的行  D-首次出现的行删除

                  p     显示符合条件的行

                  a \string 在指定的行后面追加新行,内容为string

                  i \string 在指定的行前面追加新行,内容为string

                  r FILE 将指定的文件的内容添加至符合条件的行处

                  w FILE 将地址指定范围内的行另存至指定的文件中

                  s/pattern/string/  查找并替换(默认只替换每行中第一次被模式匹配到的字符串)

                      s///中的/分割符也可以使用其他的(如s###,s@@@)

                      加修饰符:

                       g:全局替换  s/pattern/sting/g

                       i: 忽略字符大小写

                      也可以 后向引用

                          \(\),\1,\2

                      &:引用模式匹配整个串

awk

    每次只读取一行操作 默认以空白符作为分隔符 以位置变量($N) 引用

    awk [options] 'script' file1 file2 …

    awk [options] 'PATTERN {action}' file1 file2 …

        print 

            print使用格式:

                print item1,item2,……

         要点:

            1、各项目之间使用逗号分隔,而输出时则以空白字符分隔

            2、输出的item可以为字符串或数值,当前记录的字段(如$1),变量或awk的表达式,数值会先转换为字符串,而后再输出

            3、print 命令后面的item可以省略,此时其功能相当于print $0 ,因此,如果想输出空白行,则需要使用print “ ”

        例如:

            awk ‘BEGIN {print "line one\nline two\nline three"}'

             awk  -F: '{print $1,$2}' /etc/passwd

    printf 

        prinrf 命令的使用格式

        printf format, item1,item2……

        要点

            1、其与print命令的最大不同是,printf需要指定formart;

            2、format 用于指定后面的每个item的输出格式

            3、printf 语句不会自动打印换行符:  常以\n作为换行操作符

        formart格式的指示符都以%开头,后跟一个字符:

                %c     显示字符的ASCII码

                %d,%i    十进制整数

                %e,%E    科学计数法显示数值

                %f    显示浮点数

                %g,%G    以科学计数法的格式或浮点数的格式显示数值

                %s     显示字符串

                %u    无符号整数

                %%    显示%自身 

           修饰符

                N:显示宽度

                 -:左对齐

                +:显示数值符号

             例如: awk 

awk 变量

    awk内置变量之记录变量

        FS:field separator 读取文本时所使用字段分隔符 默认是空白字符

        RS: record separator 输入文本信息使用的换行符

       OFS:out field separator 输出时所使用字段分隔符

       ORS:out  record separator 输出时所使用的换行符

    awk内置变量之数据变量

        NR:命令所处理的记录数;如果有多个文件,这个数目会把处理的多个文件中的行统一计数;

        NF:当前记录的field个数

        FNR:与NR不同的是,FNR用于记录正处理的行是当前这一文件中被总共处理的行数

        ARGV: 数组,保存命令行本身这个字符串,如 awk '{print $0}' a.txt b.txt 这个命令中,ARGV[0]保存awk, ARGV[1] 保存a.txt

        AGRC:awk命令的参数的个数

        FILENAME:awk命令所处理的文件的名称

        ENVIRON:当前shell环境变量及其值得关联数组;

    用户自定义变量

        gawk 允许用户自定义自己的变量以便在程序代码中使用。

    awk 的操作符:

        算术操作符:

            -x    负值

            +x    转换为数值

            x^y    

            x**y  次方

            x*y    乘法

            x/y    除法

            x+y

            x-y

            x%y

        字符串操作符:

             =

            +=

            -=

            *m

            /m

            %m

             ^=

             **=

            ++

             --

        布尔值符号

            x < y

            x <= y

            x > y

            x >= y

            x == y

            x != y

            x ~ y

            x ! ~ y

            subscript in array

        表达式之间的逻辑关系

            &&

             ||

        条件表达式

            selector ? if-true-exp:if-false-exp

   awk 的模式

        1、Regexp  正则表达式,格式为/regular expression/

        2、expression  表达式,其值非0或为非空字符时满足条件,如 $1 ~ /foo/ 或$1 == "baidu"  用运算符~ (匹配)和!~ (不匹配)

        3、Ranges    指定的匹配范围,格式为pat1,pat2

        4、BEGIN/END    特殊模式,仅在awk命令执行前运行一次或结算前运行一次

        5、Empty(空模式) 匹配任意输入行:

    

常见的Action

    Expression    表达式

    Control statements    控制语句

    Compound  statements    

    Input statements

    Output statements

文件查找

locate: 是基于根据全系统的文件数据库进行的,非实时,模糊匹配,查找速度快。

        updatedb    手动更新文件数据库

find         实时查找、精确查找、遍历指定目录中的所有文件完成查找,速度慢

    find  查找路径    查找标准 查找到以后的处理动作

        查找路径:默认为当前目录

        查找标准:默认为指定路径下的所有文件

        处理动作:默认为显示

匹配标准:

    -name    FileName        对文件名作精确匹配 (支持文件名通配符 ? * [ ] )

    -iname   FileName        文件名匹配时不区分大小写

    -regex    Pattern            基于正则表达式进行文件名匹配

    -user     UserName        基于文件的属主文件查找   

    -group   GroupName    基于文件的属组文件查找    

    -gid    UID                      基于文件的属主ID文件查找

    -gid     GID                     基于文件的属组ID文件查找      

    -nouser                          查找没有属主的文件

    -nogroup                        查找没有属组的文件

    -type                              根据文件类型查找

               f 、d、c、b、l、p、s  文件的类型

    -size

              [+|-] #k    查找文件大于或小于#k大小的文件

                      #M

                      #G

组合条件查找    -a 、-o 、-not  (默认的是或条件)

根据时间查找

     -mtime    天数

     -ctime

     -atime

                    [+|-] 天数    查找文件被多少天之前或之内修改(访问、改变)

    -mmin    分钟数

    -cmin

    -amin

根据权限查找

    -perm    mode    权限位精确匹配

    -perm    /mode    任意一位匹配即满足条件

    -perm    -mode    文件权限能完全包含mode时才能匹配

执行动作:

    -print:显示

    -ls    类似ls -l的形式显示每一个项目的详细信息

    -ok   COMMAND {} \;    每一次操作都需要用户的确认

    -exec COMMAND {} \;    不需要确认

            find ./ -perm -020 -exec mv {} {}.new \;