1. 程式人生 > >關於shell中的正則表示式和awk的使用

關於shell中的正則表示式和awk的使用

今天有幸得方叔開的小灶,特將課堂筆記整理如下,以備後續使用。

        1、關於正則表示式

  • egrep和grep -e都可接正則表示式,若使用grep接正則表示式,則表示式中的"["和“]”需要轉義
  • 匹配次數
+           表示匹配至少一次
*            表示匹配0次或多次
{m,n}    表示匹配m到n次
{m}       表示只匹配m次

?           表示匹配0次或一次

  • 舉例將a.txt中的一行“123abc456”替換為“abcd”

             sed -i 's/^[0-9]\{3\}abc[0-9]\{3\}/abcd/g' a.txt

            表示式中的開頭的s表示替換,結尾的g表示全域性替換,即替換檔案中所有匹配行,表示式語法為‘s/匹配的正則表示式/替換後的字串/g’

        2、awk與gawk

  • 區別

              gawk可用的函式更多,而awk處理的列不能超過200列

  • 語法
       
BEGIN {
    ......#可選部分,在處理檔案前執行的內容,如全域性變數的宣告等
}
{
    ......#必選部分,從檔案的第一行到最後一行,每行都作為該部分的輸入引數
}
END {
    ......#可選部分,關閉檔案前執行
}

符號 含義 符號 含義
FS="," 以逗號分隔 IFS 指定輸入分隔符
OFS 指定輸出分隔符 NF 當前行分割後的列數
NR 當前行數 $0 當前整行
split() 拆分已分割後的列的函式 continue 繼續執行迴圈,用於for或while中
next 不再處理當前行,改為處理下一行 exit 退出當前指令碼

  •  awk用法舉例

            處理a.txt中的內容,要求彙總統計各字元後的數字的和,a.txt的內容如下:

a,2
b,3
a,1
c,4
b,4
d,1
c,1
            處理程式碼如下:a.awk
BEGIN{
    FS=",";
}
{
    a[$1] += $2;
}
END{
    for (i in a)
    {
        printf("key=%s, value=%d\n", i, a[i]);
    }
}
執行命令:awk -f a.awk a.txt後,得到
  
key=a, value=3
key=b, value=7
key=c, value=5
key=d, value=1