SHELL训练营--day3

shell 特殊符号

在上节中,变量值定义时,提到特殊符号。
在shell中,特殊符号有特别定义,需要在变量声明时需要脱义。
下面列举出一些特殊符号:
* 号 :在命令中提到过,通配符,表示0++个任意字符。
?号:匹配符,任意一个字符。
# 号:注释符,表示该行为注释行。
$号:可做变量名前,表示取变量值。也可 表示行结束符。
!号:主要是用于历史命令调用。可用 "set -H"取消。
~ 号:主要用于路径描述,表示家目录。
; 号: 命令行结束。
| 号:管道符。
\>,\>\>,<,<<,号:输入输出重定向符。
& 号:后台运行符。&> 表示文件正确描述符和错误描述符都指向同一个文件。
|| 和&& 号:命令逻辑运算。|| 表示“或”,前后命令 逻辑取反。&&表示“与”,前后命令逻辑要一致。
[]和{}在 命令中,有介绍。


管道符与命令输入

前面提到命令的输出,通过管道符,可以导入文件中,也可导入命令。
常用来做为后面命令的输入处理的对象。
这里列举一些文本文件处理命令,作为管道符的导入命令。

  • cut命令:以一行 为单位处理对象,进行文本的分隔,显示,不会修改原文件。
    cut 以参数 -d 指定分隔符,-f 指定显示的段号。如head -2 /etc/passwd | cut -d ":" -f 1
    cut 以参数 -c NUM 指定显示特定位置字符。
    需要注意的是 cut 分隔符不能有效的处理以多个空格为分隔符。
    另外cut显示段号写法,如: -f 1-4, -f 1,3
  • sort 排序:将文本对象每一行当成一个对象,进行行数重排。

    默认以首个字符开始按ascii码排序。
    以参数-n 指定以数字排序,此时其它字符作为0进行排序处理。
    另外 sort 也可对行进行分隔(参数 -t 分隔符),然后指定按相应的段进行排序(参数 -kn1,n2 )。
    如:sort -t: -k3 -n /etc/passwd
    反序排列(-r):sort -r /etc/passwd
    另一个较常用参数(-u),去重排列。排列时,如果多行相同,那么只显示一行。

  • uniq:去重,常和sort排序一起,

    注意的是,sort排序去重,不能统计重复个数。uniq 可通过参数 (-c) 统计重复次数。
    uniq 指定的重复是相邻的行重复。如果重复行有间隔,那么不会按重复计算。

  • wc : 统计,

    uniq是统计行重复,wc 常用来统计不重复的字符,行数。
    参数(-l):统计行数。
    参数(-c) :统计字符个数,注意包括所有的字符,如换行符。
    参数(-w) :统计所有的单词数。

  • tee 多重输出

    在命令输出重定向时,默认只能向一个文件 进行输出。
    但有时在保存到文件 时,又需要查看输出内容。此时,可用tee命令,将命令输出到文件 和标准输出对象--屏幕上。如:last|head -2 | tee last.list 会在当前目录下创建last.list文件,写入命令结果,并显示在屏幕上。

  • tr 字符替换

    将显示的内容中 指定特定的字符 替换为其它字符。
    注意只能替换字符 。如小写换为大写:who | tr '[a-z]' '[A-Z]'
    也可删除字符。 如删除字符 :who | tr -d 'oo'
    也可删除 相邻重复字符:echo "hiiii2233455546"|tr -s [i,2-6]

  • split切割文件

    以上都是以行为单行处理文本,split 主要用来将文件分割成大小相等的多个文件 。
    以行为分割单位:split -l 10 /etc/passwd
    参数(-b) 以byte为单位分割文件,注意分割后文件默认是以"x..."开头。
    可指定文件前缀。如:split -b 50 1.txt abc 将1.txt分割成50字节大小文件 ,以abc为前缀。
    又如:split -l 10 /etc/passwd pd分割为以pd为前缀的文件。

猜你喜欢

转载自blog.51cto.com/sincethen/2333149