「Shell學習筆記」終端檔案格式化處理

2020-08-09 13:53:58

正則表達式基礎字元集

字元 意義
^w 以w爲行首
w$ 以w爲行尾
. 一個任意字元
\ 跳脫符
* 萬用字元
[abc] 一個是a或者是b或者是c的字元
[0-9] 一個0到9中的任意字元
[^abc] 一個非abc的任意字元
w\{n\} n個w
w\{n,\} n以上個w
w\{n,m\} n到m個w

正則表達式擴充套件字元集

字元 意義
w+ 一個以上的w
w? 零個或一個w
gd|good|dog gd或者good或者dog,注意,這種用法需要獨立作爲一個關鍵字字串
(gd|good|dog) 這種用法可以作爲字串的一部分。
(abc)+ 一個以上的「abc」

sed

sed是一個數據處理工具,用於將數據進行替換、刪除、新增、選取特定行等。
sed也是一個需要輸入的管道命令。

sed [-nefr] [n1[,n2]]function

sed的各功能比較複雜,宜使用sed --help來具體檢視。

範例:

nl /etc/passwd | sed '2,5d'

nl /etc/passwd | sed '2a drink tea'

sed可以不作爲需要輸入的管道命令而直接處理檔案。

sed -i [n1[,n2]]function filename

格式化輸出

printf

printf 'format' content

和C語言很類似。
範例:

比如Printf '%s \t' $(cat printf.txt)

據說printf就是直接呼叫C語言的printf而實現,所以特殊樣式參照C語言。

awk

awk也是一個數據處理工具,一般用於整行處理。
暫時還用不上awk,對於書上的東西暫時也不是很好理解,先Mark一下。
https://www.runoob.com/linux/linux-comm-awk.html

檔案比對工具

diff

用於比對兩個ASC2文字檔案,以行爲單位比對。
diff通常用於比對同一個檔案的新舊版本差異。

diff [-bBi] one-file the-other-file

-b:忽略多個空白的差異,比如("about me"與"about me"則認爲相同)。
-B:忽略空白行的差異。
-i:忽略大小寫不同。

cmp

cmp以位元組爲單位比對,所以也可以比對二進制檔案

cmp [-l] file1 file2

-l:將所有不同處都列出來(預設只會列出第一個不同的地方)