linux中的文件處理grep、sed、awk

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 關鍵字 文件名 ##顯示前兩行

linux中的文件處理grep、sed、awk
linux中的文件處理grep、sed、awk
linux中的文件處理grep、sed、awk

擴展的(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個字符'
  1. 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開頭的一行,然後打印其中的第二列
linux中的文件處理grep、sed、awk

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章