關於shell中的正則表示式和awk的使用
阿新 • • 發佈:2019-01-26
今天有幸得方叔開的小灶,特將課堂筆記整理如下,以備後續使用。
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
執行命令:awk -f a.awk a.txt後,得到BEGIN{ FS=","; } { a[$1] += $2; } END{ for (i in a) { printf("key=%s, value=%d\n", i, a[i]); } }
key=a, value=3
key=b, value=7
key=c, value=5
key=d, value=1