1. 程式人生 > 其它 >【linux系統】命令學習(六)awk sed grep 與管道的使用

【linux系統】命令學習(六)awk sed grep 與管道的使用

程式執行環境輸入與輸出

  標準輸入0

    read a;echo $a

  標準輸出1

    echo cesh

  錯誤輸出

    ls notr

管道重定向

  管道與管道之間可以重定向

  管道與檔案之間可以重定向

  用於寫入

  

  將錯誤的輸出存進去

  

管道連結

管道連線符 |

  可以連結多個程式

  管道連線是以紫禁城的方式啟動的

  

管道執行的上下文控制

  使用{command;}注意花括號與內部命令之間的空格與分號

  使用控制邏輯while read 組合

  使用${}''

grep awk sed 學習

  grep 基於正則表示式查詢滿足條件的行

  awk 根據定位到的資料行處理其中的分段

  sed 根據定位到的資料行修改資料

  

  與sql對比

  grep 資料查詢定位 select * from table like "%yyyy"

  awk 資料切片 select field from table

  sed 資料修改 update table set filed = new where hhhhh

平臺實現差異

  不同的系統使用命令會有些不同

  https://www.gnu.org/software/sed/manual/sed.html

  https://www.gnu.org/software/grep/manual/grep.html

  https://www.gnu.org/software/gawk/manual/gawk.html

BRE基本正則表示式

  ^開頭 $結尾

  [a-z][0-9]區間,如果開頭帶有^表示不能匹配區間內的元素

  *0個或多個

  .表示任意字元

ERE擴充套件正則表示式

  基本正則表示式基礎上的擴充套件

  ?非貪婪匹配

  +一個或者多個

  ()分組

  {}範圍約束

  | 匹配多個表示式的任何一個

bash 程式設計語法

  變數

    命名 英文字母、下劃線、數字,收個字元不能以數字開頭

    中間不能有空格,可以使 用下劃線(_)

    不能使用標點符號

    不能使用bash裡面的關鍵字(可以用help命令檢視保留關鍵字)

  定義與使用變數

    your_name="Linda“

  只讀變數

    a="123"

    readonly a

  刪除變數

    unset variable_name (不能刪除只讀變數)

  變數型別

    字串:“12222”

    拼接字串:name = "hello, "$bianliang"!"

    陣列 arrayname = (value0 value1 value3)

      取陣列 valuen = ${arrayname[n]}

      單獨賦值 arrayname[0]=value0

  控制語句【空格非常重要】

    條件分支:if  

      if condition

      then

        command1

        command2

        commanf

      fi

      if [3==3];when echo "true";else echo "false";fi

      if [[3>3]];when echo "true";else echo "false";fi

      -gt 大於號 -lt小於號 -eq 相等

  for 迴圈

    for var in item1 item2 item 3

    do

      command1

      command2

    done

    for i in $(uuu.txt) ; do echo $(i);done

  while迴圈

    while condition

    do

      command

    done

    while read line; do echo $line;done < tuii.txt (表示從tuii.txt檔案去讀取)

bash指令碼編寫

  read

    從終端或者檔案中讀取輸入的內部命令

    讀取整合輸入

    每行末尾的換行符不被讀入

      read var

      read var0 var1

      read

  指令碼引數傳遞

    $0指令碼名稱

    $1-$n 獲取指令碼引數

    $# 傳遞到指令碼的引數個數

    $$ 指令碼執行的當前程序號

    $*以一個單字串顯示所有向指令碼傳遞的引數

    $?是顯示最後命令的退出狀態,0表示沒有錯誤,其他任何值表明有錯誤

  基本運算

    算術運算

      +加法 -減法 \*乘法 /除法 %取餘 =賦值 ==相等 !=不相等 -eq相等 -ne不相等 -gt大於 -lt小於 -ge大於等於 -le 小於等於

      語法:‘expr $a + $b’

bash與linux命令集合

  

  #!/bin/bash
  echo $1,$2,$3
  echo "檔名 "$0
  echo "引數變數 "$#
  echo "return "$?