鳥哥的Linux私房菜基礎篇 第十二章 正規表示式與檔案格式化處理
1. 正則的概念
正規表示式就是處理字串的方法,他是以行為單位來進行字串的處理行為, 正規表示式通過一些特殊符號的輔助,可以讓使用者輕易的達到“搜尋/刪除/取代”某特定字串的處理程式!
2. 基礎正規表示式
-
- grep 工具
正規表示式也需要支援工具程式來輔助才行,以介紹grep為例。
grep 的基本用法:
grep [-A] [-B] [--color=auto] '搜尋字串' filename
#auto的選項表示自動加上顏色
# -A 表示after
# -B 表示befor
eg:
dmesg |grep -n -A3 -B2 --color=auto 'qx'
dmesg | grep -n '[^a-z]oo'
字元彙總:
字元 | 意義 |
---|---|
^word | 以此開頭 |
word$ | 以此結尾 |
. | 代表一個字元,如: grep e.e file, //eae eve |
\ | 轉義 |
* | 重複前一個字元: grep e* file // eeeee ee |
[n1- n2] | 如[A-Z] 為大寫字母 |
[^list] | 列出不要的字串和範圍,[^A-Z] |
{n,m} | 重複前一個字元的次數為n-m,如g{2,3},ggg |
-
- sed工具
增加和刪除:
sed ' 2,5d' //刪除2-5行
sed '2a drink tea' //第2行下面增加一行
sed '2,5c newcontent' //以行為單位進行取代,將2-5行內容替換為一行新內容
sed 's/old/new/g' //搜尋並取代。
取代:
eg: 取出IP地址
ifconfig eth0|grep inet |sed 's/^.*inet //g' |sed 's/ netmask.*$//g'
. 表示任意字元,* 表示任意字元的序列, .*就表示一串任意字元
修改檔案內容:
sed 的“ -i ”選項可以直接修改檔案內容,如下:
sed -i 's/\.$/\!/g' regular_express.txt
3. 正規表示式的延伸
去除空白行和行首為#的:
grep -v -E '^$|^#' etcfile
或者: egrep -v '^$|^#' etcfile
4. 檔案的格式化與相關處理
通過資料流重定向,配合printf,awk指令。
printf
例如我們要安照下面的版式進行輸出:
Name Chinese English Math Average
DmTsai 80 60 92 77.33
VBird 75 55 80 70.00
Ken 60 90 70 73.33
printf ‘列印格式’ 實際內容
用法類似C語言的printf,
方面的幾個特殊樣式:
\a 警告聲音輸出
\b 倒退鍵(backspace)
\f 清除螢幕 (form feed)
\n 輸出新的一行
\r 亦即 Enter 按鍵
\t 水平的 [tab] 按鍵
\v 垂直的 [tab] 按鍵
\xNN NN 為兩位數的數字,可以轉換數字成為字元。
關於 C 程式語言內,常見的變數格式
%ns 那個 n 是數字, s 代表 string ,亦即多少個字元;
%ni 那個 n 是數字, i 代表 integer ,亦即多少整數碼數;
%N.nf 那個 n 與 N 都是數字, f 代表 floating (浮點),如果有小數碼數,
例子:
printf ‘%s\t %s\t %s\t %s\t %s\t \n’ $(cat printf.txt)
awk ,資料處理工具
awk '{print $1 "\t" $3}' file //取出1,3行
– | – |
---|---|
$0 | 表示取出整行的資料 |
NR | 表示該資料的行數 |
NF | 每一行的欄位總數 |
FS | 目前的分割字元,預設是空格 |
awk 'BEGIN {FS=" "} $3<10 {print $1 "\t" $3}' file //取出第三列小於10的
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000 41000
使用awk輸出為:
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.0
命令為:
cat pay.txt | \
> awk ' {if(NR==1) printf "%10s,%10s,%10s,%10s\n ",$1,$2,$3,$4,"total"} \
> NR>=2 {total=$2+$3+$4
> printf "%10s,%10s,%10s,%10s,%10.2f\n",$1,$2,$3,$4,$total}'
檔案比較工具
- diff
1 檔案比較:
如,將passwd檔案做如下操作:
cat passwd | sed -e '4d' -e '6c no six line' > passwd.nex
diff passwd passwd.nex
2 目錄對比
可以對比整個目錄下的區別
- cmp
以位元組為單位進行對比 - patch
結合diff,產生patch檔案,從而,對舊檔案進行更新,或者對新檔案進行恢復:
diff -Naur passwd.old passwd.new > passwd.patch
patch -p0 <passwd.patch 更新
patch -R -p0 <passwd.patch 恢復
相關文章
- 鳥哥私房菜-基礎篇小筆記筆記
- 鳥哥的 Linux 私房菜Linux
- 鳥哥的Linux私房菜基礎篇 第十三章 shell scriptsLinux
- 鳥哥的LINUX私房菜_基礎學習篇(第三版)Linux
- 鳥哥的Linux私房菜--CPU種類Linux
- 鳥哥私房菜學習筆記(第零章)筆記
- 鳥哥的Linux私房菜 -- 電子書(pdf)Linux
- linux學習導讀_鳥哥的私房菜Linux
- linux-鳥哥私房菜學習筆記Linux筆記
- PJzhang:鳥哥的linux私房菜-shell指令碼-上Linux指令碼
- 鳥哥的Linux私房菜基礎篇 第十章認識和學習bash這個shellLinux
- 鳥哥的Linux私房菜筆記第六章Linux筆記
- 正規表示式-基礎實戰篇
- Python基礎學習篇-4-常用的正規表示式處理函式Python函式
- 菜鳥學Linux第055篇筆記php基礎Linux筆記PHP
- JS基礎篇–正規表示式詳解JS
- 正規表示式基礎
- JS基礎:正規表示式JS
- iOS基礎:正規表示式iOS
- 正規表示式基礎一
- 正規表示式處理批量插入
- 劉遄:作為一名新人讀完《鳥哥的Linux私房菜》的感想Linux
- MySQL索引基礎--菜鳥篇MySql索引
- 匹配linux檔案路徑的正規表示式Linux
- bash基礎特性、正規表示式
- shell基礎 — 基本正規表示式
- 正規表示式基礎知識
- 前端基礎之正規表示式前端
- 正規表示式基礎入門
- Python正規表示式基礎Python
- 使用正規表示式處理金額
- JavaSE基礎:”頭疼”的正規表示式Java
- JavaSE基礎:"頭疼"的正規表示式Java
- 匹配 XML 檔案正規表示式XML
- JavaScript基礎-06-正規表示式JavaScript
- python基礎操作——正規表示式Python
- 正規表示式(一) 基礎知識
- 正規表示式 基礎+使用案例解析