Linux/UNIXShell命令进阶详解

用cat进行拼接

十余年的麦盖提网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整麦盖提建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“麦盖提网站设计”,“麦盖提网站推广”以来,每个客户项目都认真落实执行。

    1 cat命令是一个日常会使用到的简单命令,cat本身表示concatenate(拼接)

    2 用cat读取文件的一般格式是

       cat file1 file2 file3....  // 这个命令将命令行参数的文件内容拼接在一起输出

    3 cat命令不仅可以读取文件并拼接数据,它还能够从标准输入中进行读取。要从标准输入中读取,就要使用管道

       stand_ouput | cat

    4 cat命令可以用来压缩多个空行,使得被压缩成为单个

       cat -s file

    5 tr命令也可以把多个的'\n'字符压缩成为单个'\n'

    6 cat命令的-n选项会在输出的每一行内容之前加上行号,但是这个并不会修改文件的内容

 

录制与回放终端会话

    1 script和scriptreplay命令在绝大多数GNU/Linux发行版本上面都可以找到

    2 scritp命令同样可以用于建立多个用户之间的进行广播的视频会话

       第一步:打开两个终端T1和T2

       第二步:在T1中输入mkfifo scriptfifo

       第三步:在T2中输入以下命令cat scriptfifo

       第四步:在T1中输入以下命令script -f scriptfifo

       第五步:在T1中输入的commands都可以在T2中看到

 

文件查找与文件列表

    1 find是UNIX/Linux命令行工具箱中最棒的工具之一

    2 find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作

    3 要列出当前目录及子目录下的所有文件以及文件夹:find base_bash

    4 find命令的两个重要的参数

       -print 指明打印匹配文件的文件名,当使用-print的时候,'\n'做为分割文件的定界符

       -print0 指明使用'\0'作为定界符来打印每一个匹配的文件名

    5 根据文件名或正则表达式匹配搜索,-name的参数指定了文件名所匹配的字符串。

       比如 find . -name "*.txt" -print   // 命令查找当前目录下的所有txt文件并打印出来

    6 find命令有一个选项-iname,该选项的作用和-name类似,但是匹配的时候会忽略大小写

    7 find命令也可以用!来否定参数意思

       find . ! -name "*.txt" -print // 命令的作用是找出当前目录下的所有非txt文件

    8 find命令在使用时候会遍历所有的子目录,我们可以采用深度参数来限制find命令的遍历深度。

       -maxdepth和-mindepth指定最大的递归深度以及最少的递归深度(从哪一层开始向下搜索)

    9 -maxdepth和-mindepth应该做为find的第三个参数出现,这样就可以第一时间限制搜索的条件,效率会提高的很多

    10 类UNIX系统将所有的一切都视为文件,文件具有不同的类型,例如普通文件,目录,字符设备,块设备,符号链接,硬链接,套接字以及FIFO等

    11 find命令的-type选项可以对文件搜索进行过滤

    12 type参数来匹配所需要的文件类型

                        文件类型                          类型参数

                        普通文件                                 f 

                        符合链接                                 l

                        目录                                        d 

                        字符设备                                 c

                        块设备                                     b

                        套接字                                     s

                         fifo                                           p

      13 删除匹配的文件,-delete可以用来删除find查找到的匹配文件

          find . -type f -name "*.txt" -delete // 命令的作用是find找出当面目录下的所有txt文件,然后删除

      14 基于文件权限和所有权进行搜索

          find . -type f -name "*.txt" -perm 644 -print // 命令的作用是找到当前目录下所有权限为644的txt文件

 

用tr进行转换

      1 tr可以用来对标准输入的字符进行替换,删除以及压缩,它可以将一组字符变成另一组字符,因而通常也被称为转换命令

      2 tr只能通过stdin,而无法通过命令行参数来接受输入。

         tr [options] set1 set2 // 将来自stdin的输入字符从set1映射到set2,并将其输入到stdout。

         set1和set2是字符类或字符集,如果两个字符集的长度不相等,那么set2会不断重复其最后一个字符直到和set1长度相等,如果set2长度大于set1那么在set2中超出set1的部分长度就全部忽略

      3 将输入字符由大写转换成小写 ,可以使用以下命令

         echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z' // 'A-Z和‘a-z’都是集合

      4 tr有一个选项-d可以通过指定需要被删除的字符集合,将出现的stdin中的特定字符删除

         echo "Hello 13 world 345" | tr -d '0-9' // 命令可以将stdin中的数字删除并输出

      5 我们可以利用选项-c来使用set1的补集,-c set1等同于定义了一个集合,这集合中的字符不包含在set1中

      6 tr可以像使用集合一样使用各种不同的字符类,这些字符类型如下所示

         alnum: 字母和数字

         alpha: 字母

         cntrl: 控制字符

         digit: 数字

         graph: 图形字符

         lower: 小写字母

         print: 可打印字符

         punct: 标点符号

         space: 空白字符

         upper: 大写字母

         xdigit: 十六进制字符

     7 可以按照下面的方式选择要使用的字符集: tr [:class1:] [:class2:]

 


排序,单一和重复

     1 sort命令既可以从特定文件也可以从stdin中获取输入,并将输入写入stdout,uniq的工作模式和sort一样

     2 我们可以按照下面的方式轻松的对一组文件进行排序

        sort file1 file2 file3 ... > sorted // 命令把多个文件排序然后重定向到sorted

     3 按数字进行排序: sort -n file

        按逆序进行排序: sort -r file

        按月份进行排序: sort -M file

     4 如果需要合并两个排过序的文件,而且不需要对合并后的文件再进行排序,可以使用

        sort -m sorted1 sorted2

     5 uniq命令通过消除重复内容,从给定输入中找出单一的行。它也可以用来找出输入中出现的重复行

     6 uniq只能用于排过序的数据输入,因此uniq要么使用管道,要么使用排过序的文件做为输入

        只显示唯一的行: uniq -u sorted

        统计个行中出现的次数: uniq -c sorted

        找出文件中重复的行: uniq -d sorted

 

分割文件和数据

     1 生成一个大小为100KB的测试文件

        dd if=/dev/zero bs=100K count=1 of=data.file 

        上面的命令会创建一个大写为100KB的文件内容全部都是0

     2 我们可以指定分割大小,将文件分割成多个更小的文件

        split -b 10k data.file // 这个命令将data.file分割成多个文件,每个文件大小为10KB

 

根据扩展名切分文件名

     1 借助%我们可以轻松将名称部分从“名称.扩展名"这种格式的文件名中提取出来

     2 ${var%.*}的含义是

        第一:从$var中删除位于%右侧的通配符所匹配的字符串,通配符从右向左进行匹配

        第二:给var进行赋值,var=sample.jpg,那么通配符从右向左匹配到.jpg,因此删除之

     3 %属于非贪婪操作,它从右到左匹配通配符的最短结果。还有一个是%%是贪婪的,匹配最长的结果

     4 类似的#和%的一样,就是它的匹配是从左到右,属于非贪婪操作

        那么##和%%类似

 


网页名称:Linux/UNIXShell命令进阶详解
本文URL:http://hbruida.cn/article/jipiso.html