linux命令ORshell脚本语言OR Makefile文档里一些命令解析

个人笔记,有些是转载,有些是摘要,有些事自己整理,有些事自己测验,如有侵权,请指出。


1.将1(标准输出)2(标准出错)的信息不显示出来.

    1>/dev/null

                 表示将命令的标准输出重定向到 /dev/null     

     2>/dev/null  

                 表示将命令的错误输出重定向到 /dev/null

    2>/dev/null &

                 &表示后台执行,你可以继续占有你的输入窗口

     也就是将1(标准输出)2(标准出错)的信息不显示出来.

参考链接:http://bbs.csdn.net/topics/10438612

2. egrep 

      输出匹配某种模式的行

      语法: egrep[必要参数][选择性参数][文件]

      功能说明:使用方法和效果同“grep-e”, egrep相当于grep功能的扩展。

      例:  find * | grep “A”      #该命令的意思是搜索当前目录下的所有档案名,并列出含字母A的。

               但是grep一次只能搜索一个字母。如果加上-e或者用egrep

              find * | grep -e “A|B”

              或者: find * | egrep “A|B”

              则表示搜索当前目录下的所有档案名,并列出含字母A或字母B的。


     参考书籍:《Linux指令速查手册》

3. sed 命令解析(转载文档似乎台湾地区的,有些地方实在不知道怎么翻译,请谅解)

     设计script的时候,有时候需要修改档案,例如:删除或者置换某些关键字。

     像这种在script执行过程,动态修改档案的作法,成为串流编辑。

     具有串流编辑能力的工具,成为串流编辑器(stream editor)。 

     sed是这方面的佼佼者,可以补充bash的不足。

     而script执行时可能要制作报表,呈现各栏位资讯。

    传统上,能和bash完美搭配的飞awk莫属。

      1. 正则表达式

              正则表达式是一种描述的方法,小型的语言,或若干种样式的组合。

              以下介绍正则表达式的语法:

              . 一点代表一个字元

                     . 代表任意字元

                      例1: .T.   代表三个字元,中间是T,左右两边是任意的一个字元

                       例2:...

                               代表字元长度是 3的字串。若想比對 . 这个元本身,需加上跳脱字元(\),写成\.。

                               例如:样式 data\....代表data.后接三個字元,如 data.txt、data.cfg、data.123等等,

                               都符合這個樣式,但 data1234就不符合了,因為四個點最左邊的那個點,已經用

                              \跳脫其特殊意義,還原為 . 這個字元本身,因此,\....和 1234比對不符

               ^ 代表位置在行的开头

                       例: ^Jack,代表Jack应该出现在行首,像 Jack and Marry 123就符合此一样式,

                               但 Hi Jack就不符合。

               $ 在尾部

                      代表在行的尾部。理同^。

                [...]字元集合

                       代表字元串列中的一个字元。

                       例1:[ABc], 代表A或B或c这三个字元中的一个。

                       例2:[Ss]ame代表 Same或same

                       例3:[A-Z]:一个大写字母

                       例4:[^A-Z]:除了大写字母之外的一个字元

                                ^在这里表示非得意思。

                 *出现0个以上

                        * 代表前面的(左)字元有0个或者0个以上

                        例如:aA*c,代表A这个字元可能出现0个或者0个以上。如aAAAc。

                  \{...\} 制定符合的个数

                         指定前面的字元的个数:如[a-z]\{3,5\}代表以小写字母组成的字串,长度是3~5

                  \(...\)把比对符合的字符串暂时保存起来

                          例如:H\(...\)\y 表示要报春H和y之间的三个字元。

                          若欲取用保存的字串,可用位置参数,\1 代表第一个保存的字串,\2 代表第二个,其他依此类推。

     2. Sed用法:非交谈式的串流编辑器,可以动态编辑档案。

                    非交谈:不和使用者互动。

                    处理的对象:档案的资料流

                    工作模式:比对每一笔资料行,若符合样式,就执行指定的动作。

                    语法:

                               sed  ‘样式命令’  档案

                               这里的样式使用一堆//, 表示寻找的意思,也可以指定资料行范围,例如1,6 表示第一行到第六行

                              /AAA/,/DDD/表示作用范围从含有AAA的資料列,到含有 DDD的資料列。                             

                  選項與參數:
                       -n  :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 
                             的資料一般都會被列出到螢幕上。但如果加上 -n 參數後,則只有經過
                             sed 特殊處理的那一行(或者動作)才會被列出來。
                       -e  :直接在指令列模式上進行 sed 的動作編輯;
                       -f  :直接將 sed 的動作寫在一個檔案內, -f filename 則可以執行 filename 內的 
                             sed 動作;
                       -r  :sed 的動作支援的是延伸型正規表示法的語法。(預設是基礎正規表示法語法)
                       -i  :直接修改讀取的檔案內容,而不是由螢幕輸出。

                   動作說明:  [n1[,n2]]function
                   n1, n2 :不見得會存在,一般代表『選擇進行動作的行數』,舉例來說,如果我的動作
                   是需要在 10 到 20 行之間進行的,則『 10,20[動作行為] 』

                   function 有底下這些咚咚:
                   a   :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
                   c   :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
                   d   :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
                   i   :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
                   p   :列印,亦即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作~
                   s   :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配
                         正規表示法!例如 1,20s/old/new/g 就是啦!
             例:         
                [root@www ~]# nl /etc/passwd | sed '2,5d'
                              1  root:x:0:0:root:/root:/bin/bash
                              6  sync:x:5:0:sync:/sbin:/bin/sync
                              7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown


     转载文档:http://www.delightpress.com.tw/bookRead/skns00004_read.pdf




4.字符转换,主要用于删除文件中的控制字符:tr

    1.语法:

                tr [-c/d/s/t] [SET1] [SET2]

                SET1: 字符集1

                SET2: 字符集2

                        -c:complement,用SET2替换SET1中没有包含的字符
                        -d:delete,删除SET1中所有的字符,不转换
                        -s: squeeze-repeats,压缩SET1中重复的字符
                        -t: truncate-set1,将SET1用SET2转换,
一般缺省为-t
 
     2、去除重复的字符

                #将连续的几个相同字符压缩为一个字符
                        $ echo aaacccddd | tr -s [a-z]
                           acd
                        $ echo aaacccddd | tr -s [abc]
                           acddd
 
     3、删除空白行
                #删除空白行就是删除换行符/n
                #注意:这些空白行上只有回车符,没有空格符
                       $ cat test.txt
                          I love linux!
                                                                                                                          
                                                                                                                          
                         Hello World!
                                                                                                                          
                        Shell is worthy to been studied
 
                 #这里用换行符的转义字符\n
                 #注意:此处用-s删除了多余的换行符,如-d,则是删除所有的换行符                                                                                                                           
                     $ cat test.txt | tr -s ["\n"]
                       I love linux!
                       Hello World!
                       Shell is worthy to been studied
                #也可以用八进制符\012,\012与\n都是换行符
                   $ cat test.txt | tr -s "[\012]"
                      I love linux!
                      Hello World!
                     Shell is worthy to been studied
 

     3、大小写相互转换
             #将语句中所有的小写字母变成大写字母,其中-t可省略
                  $ echo "Hello World I Love You" |tr [-t] [a-z][A-Z]
                     HELLO WORLD I LOVE YOU
             #将语句中所有的大写字母变成小写字母
                  $ echo "Hello World I Love You" |tr [A-Z] [a-z]
                     hello world i love you
             #也可以利用字符类进行转换
             #[:lower:]代表小写字母,[:upper:]代表大写字母
                  $ echo "Hello World I Love You" |tr [:lower:][:upper:]
                     HELLO WORLD I LOVE YOU
 
     4、删除指定的字符
                $ cat test.txt
                   Monday     09:00
                  Tuesday    09:10
                  Wednesday  10:11
                  Thursday   11:30

                  Friday     08:00
                 Saturday   07:40
                 Sunday     10:00
          #现在要删除处理星期之外的所有字符
          #-d代表删除,[0-9]代表所有的数字,[: ]代表冒号和空格
              $ cat test.txt | tr -d "[0-9][: ]"
                  Monday
                 Tuesday
                 Wednesday
                 Thursday
                 Friday
                 Saturday
                 Sunday
    5、利用-c进行补集的替换
         #有时候在文本中我们只知道要保留的一些字符,其他字符种类繁多,就可以使用补集的替换
             $ cat test.txt
                Monday     09:00
                Tuesday    09:10
               Wednesday  10:11
               Thursday   11:30
               Friday     08:00
               Saturday   07:40
               Sunday     10:00
        #我们只需要星期,则思路就是除了字母,其他统统替换掉
        #这里,-c:用换行符替换掉除了字母外的所有字符-s:删除多余的换行符
             cat test.txt|tr -cs  "[a-z][A-Z]" "\n"
             Monday
             Tuesday
             Wednesday
             Thursday
             Friday
            Saturday

            Sunday

     此项为转载:http://blog.csdn.net/zhuying_linux/article/details/6825568


5. xargs用法整理

     管道+xargs用于把上游输出转换为下游参数输入。例如 ls *.bak | xargs rm -f

    的意思是强制删除该目录下面所有的 .bak结尾的文件。

     参考目录:http://www.bfcat.com/index.php/2012/07/find-xargs/


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值