linux知識拾遺

比較文件內容

比較file1、file2文件內容不同.

diff -c file1 file2 | colordiff

grep、sed、awk

  • grep

    使用正則表達式搜索文本,並把匹配的行打印出來.

    -r:遞歸查找

    # 遞歸查找
    grep -r *.conf *
    

    -n:顯示行號

    # 過濾符合條件的行,顯示行號
    grep -rn *.conf *
    

    -v:反向匹配
    -E:正則匹配

    # 過濾文件的註釋和空行
    grep -Ev '^#|^$' elasticsearch.yml
    
  • 正則表達式

    • 正則表達式單字符

      • 特定字符

          grep 'a'  passwd
        
      • 範圍字符

          grep '[a-zA-z0-9]' passwd
          grep '[^0-9]' passwd  取反,除去數字外的字符
        
      • 任意字符

          grep '.' passwd  如果要使用.本身,需要轉義:\.
        
    • 正則表達式其他符號

      • 邊界字符 、頭尾字符

          ^ 字符,頭字符,放在一串字母前邊,代表以此開頭. grep '^root' passwd
          $ 符號,如false$,代表以false字符結束
          ^$ 代表空行,grep '^$' passwd
        
      • 元字符

          w: 匹配任何字符類字符,包括下劃線,相當於([a-zA-Z0-9_])
          W: 匹配所有非字符類字符,相當於([^a-zA-Z0-9_])
          b: 代表單詞分割. 如,grep '\bx\b' passwd,可以將單詞前後分隔的x字符選出來,但不會選擇單詞
          中出現的x
        
      • 多詞匹配

          \*: 零次或多次匹配前面的字符或子表達式. 例子:grep 'se*' test.txt
          \+: 一次或多次匹配前面的字符或表達式. 例子:grep 'se\+' test.txt. 注意這裏+前面加反斜槓.
          ?: 零次或1此匹配前面的字符或表達式. 如:grep 'se\?' test.txt. 注意這裏?前面要加反斜槓.
          括號使用: grep '\(se\)*' test.txt. 注意括號前面要加反斜槓.
          指定重複次數: grep '[0-9]\{2,3\}'  passwd
        
  • sed 行編輯器

    處理時,把當前處理的行存儲在臨時緩衝區中,稱爲“模式空間”. 接着用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕。接着處理下一行,這樣不斷重複,直到文件末尾。文件內容並沒有 改變,除非你使用重定向存儲輸出.

    • 命令格式

        sed [options] 'command' file(s)
        options選項:
        	-e<script>或--expression=<script>:以選項中的指定的script來處理輸入的文本文件;
        	-n或--quiet或——silent:僅顯示script處理後的結果;
      
    • p 打印相關的行

        cat /etc/passwd | sed -n '10p'   // 打印第10行內容
        cat /etc/passwd | sed -n '10,20p'   // 打印第10-20行內容
        cat /etc/passwd | sed -n '10,20!p'   // 不打印第10-20行內容
        cat /etc/passwd | sed -n '10~2p'   // 間隔行,打印出10,12,14...
        cat /etc/passwd | sed -n '/root/,/games/p'  // 正則匹配行範圍
        sed -n '/root/p' /etc/passwd  // 打印匹配的行
      
    • a 在行後面增加內容

        cat /etc/passwd | sed '2a***'   // 第二行後增加***
        cat /etc/passwd | sed '1,2a***'  // 在行範圍後增加*** 
      
    • i 在行前面插入內容

    • c 把選定的行改爲新內容

        cat /etc/passwd | sed '2c abcd'   // 第二行後修改成abcd
        cat /etc/passwd | sed '1,2c abcd'   // 範圍內行修改成abcd
      
    • d 刪除行

        cat /etc/passwd | sed '2d'   // 刪除第二行
        cat /etc/passwd | sed '/root/d'  // 刪除掉root行
      
    • s 替換

      • g表示全局替換

        ifconfig bond0|sed -n ‘/inet /p’|sed ‘s/inet.//’ |sed ‘s/netmask.*//’ # 獲取某個網卡的ip地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章