1.grep
grep [options] pattern [file…]
options:表示選項
pattern:要匹配的模式。
file:表示一系列的文件名
選項:
-c 只輸出匹配行的計數
-i 不區分大小寫(用於單字符)
-n 顯示匹配的行號
-v 不顯示不包含匹配文本的所以有行
-s 不顯示錯誤信息
-E 使用擴展正則表達式
grep -c 關鍵字 文件名 ##顯示出現的關鍵字的行數
grep -n 關鍵字 文件名 ##顯示該關鍵字的行
grep -n2 關鍵字 文件名 ##顯示該關鍵字行的上下各兩行
grep -A2 關鍵字 文件名 ##顯示後兩行
grep -B2 關鍵字 文件名 ##顯示前兩行
擴展的(Extend)正則表達式(注意要使用擴展的正則表達式要加-E選項,或者直接使用egrep):
匹配字符:這部分和基本正則表達式一樣
- 字符出現 [0-任意次 ]
\? 字符出現 [ 0-1次 ]
+ 字符出現 [ 1-任意次]
{n} 字符出現 [ n次 ]
{m,n} 字符出現 [ 最少出現m次,最多出現n次]
{0,n} 字符出現 [ 0-n次]
{m,} 字符出現 [ 至少m次]
(xy){n}xy 關鍵字出現[n次]
.* 關鍵字之間匹配任意字
3.grep中的正則表達式
^hello ##以hello開頭
hello$ ##以hello結尾
'h....o' ##'h開頭,o結尾,中間4個字符'
'h.....' ##'h開頭,後面5個字符'
'.....o' ##'o結尾,前面5個字符'
- sed
stream editor:用來操作的純ASC||碼的文本,處理時把當前行存入臨時緩衝區,成爲模式空間,可以指定僅僅處理哪些行,sed符合條件的處理。不符合條件的不處理。
sed命令格式:
sed [options] 'command' files
sed [options] -f scriptfile files ##用指定文件做sed命令
sed對字符處理:
p 顯示
d 刪除
a 添加
c 替換
w 寫入
i 插入
p模式操作:
sed -n '/#/p' fstab 顯示有#行的內容
sed -n '/#/!p' fstab 除了#的行都顯示
sed -n '/^#/!p' fstab 除了#開頭的行都顯示
sed -n '/^#/p' fstab 顯示#開頭的行
sed -n '/#$/p' fstab 顯示#結尾的行
sed -n '/^UUID/p' fstab 顯示UUID開頭的行
sed -n '/^UUID/!p' fstab 除了UUID開頭的行都顯示
sed -n '2,6p' fstab 顯示第2行到第6行的內容
sed '2,6!p' fstab 除了2-6行都顯示
d模式操作:
sed '/^UUID/d' fstab 除UUID開頭的行的內容
sed '/^UUID/!d' fstab 刪除除UUID開頭外的行的內容
sed '/^$/d' fstab 刪除空行
sed '3,8d' fstab ##刪除3-8行,不顯示,但文件本身並無變化
a模式操作:
sed '/^UUID/a\hello sed\n westos' fstab ##在UUID的最後一行中加入hello sed 換行 westos
c模式操作:
sed '/^UUID/c\hello' fstab ##將UUID開頭的內容換爲hello
i模式操作:
sed '/^UUID/i\hello sed\n westos' fstab ##將UUID開頭的內容之前加入hello sed 換行 westos
w模式操作:
sed '/^#/w /mnt/testfile' fstab ##將fstab中以#爲開頭的行整合到/mnt/testfile中
sed -n '/^#/w /mnt/testfile' fstab ##不顯示
sed '6r/mnt/linux' fstab ##將/mnt/linux中的所有內容整合到fstab的第六行中
c模式操作 :
sed '/^#/chello\nlinux' fstab ##將#開頭的行的內容用‘hello\nlinux’替換
sed的其他用法:
sed 'G' passwd ##每打印一行同時打印空行
sed '$!G' passwd ##最後一行不隨後打印空行
sed '=' passwd ##打印每一行之前先打印行號,第二行打印內容
sed '=' passwd |sed 'N;s/\n/ /' ##將換行換成空格
sed -n '$p' data ##顯示最後一行
awk
awk '{print NR}' passwd ##打印每行行號
awk -F : '{print NF}' passwd ##打印每行有幾列
awk -F : '{print $1,$2}' passwd ##打印第1列與第二列,空格連接
awk -F : '{print $1":"$2}' passwd ##打印第1列與第2列,二者用:連接
awk -F : 'BEGIN{print "name passwd"}{print $1":"$2}END{print "end"}' passwd
##第一行前加入字符name passwd 最後一行字符加入end
awk -F : 'BEGIN{print "name passwd"}/bash$/{print $1":"$2}END{print "end"}' passwd ##結果是以bash結尾的行
awk -F : 'BEGIN{n=0}/bash$/{n++}END{print n}' passwd ##對以bash結尾的行進行計數
awk -F : 'BEGIN{n=0}{n++}END{print n}' passwd ##對passwd有幾行進行計數
使用一條命令抓取ifconfig返回的ip:
ifconfig ens33|awk '/inet\>/{print $2}'
先使用awk '/inet' 抓取以inet開頭的一行,然後打印其中的第二列