1. 程式人生 > >SHELL文字處理三劍客(sed、grep、awk)

SHELL文字處理三劍客(sed、grep、awk)

一、grep文字過濾器

1. 基本介紹

Global search regular expression and print out theline
全面搜尋研究正則表示式並顯示出來 grep命令是一種強大的文字搜尋工具根據使用者指定的
“模式”對目標文字進行比配檢查,列印匹配到的行,由正則表示式或者字元及基本文字字元所編寫的過濾條件。

2. grep中字元的匹配位置設定
grep 匹配條件 處理檔案
    ^關鍵字  #關鍵字開頭的行
    關鍵字$ #關鍵字結尾的行
    \<關鍵字 #不再向前擴充套件
    關鍵字\> #不再向後擴充套件
\<關鍵字\> #不再向前後擴充套件

例如:

[root@sunshine shell]# grep root passwd                    #匹配有root的行
[root@sunshine shell]# grep ^root passwd                   #匹配root開頭的行
[root@sunshine shell]# grep root$ passwd                   #匹配root結尾的行          
[root@sunshine shell]# grep -i ^root passwd                #-i忽略大小寫
[root@sunshine shell]# grep -i -E "^root|root$" passwd #-E識別|符號,"|"表示“或” [root@sunshine shell]# grep -i -E -v "^root|root$" passwd #-v反向過濾

這裡寫圖片描述

2. grep中字元的匹配次數設定
* #字元出現0-任意次
\? #字元出現0-1次
+ #字元出現0-任意次
{n} #字元出現n次
{m,n} #字元出現m-n次
{0,n} #字元出現0-n次
{m,} #字元最少出現m次
(xy){n}xy #關鍵字出現n次
.* #關鍵字之間匹配任意字元要加-E 

例如:

[root@sunshine shell]# grep -E "r*t" file
[root@sunshine shell]# grep -E "r.*t" file       #匹配rt之間任意字元的行
[root@sunshine shell]# grep -E "r..." file       #匹配r後面有三個字元字元的行
[root@sunshine shell]# grep -E "r...\>" file     #匹配r後面有三個字元字元的行,不向後做擴充套件
[root@sunshine shell]# grep -E "\<r..." file     #匹配r後面有三個字元字元的行,不向前做擴充套件
[root@sunshine shell]# grep -E "\<r...\>" file   #匹配r後面有三個字元字元的行,不向前後做擴充套件
[root@sunshine shell]# grep -E "ro*t" file       #匹配rt之間o出現0-任意次的行
[root@sunshine shell]# grep -E "ro?t" file       #匹配rt之間o出現0-1次的行
[root@sunshine shell]# grep -E "r0{1,}t" file    #匹配rt之間o出現1-任意次的行
[root@sunshine shell]# grep -E "ro{1}t" file     #匹配rt之間o出現1次的行
[root@sunshine shell]# grep -E "ro{0,1}t" file   #匹配rt之間o出現0-1次的行
[root@sunshine shell]# grep -E "(root){1,}" file #匹配root關鍵子出現1-任意次的行

這裡寫圖片描述
這裡寫圖片描述

指令碼編寫例項:
編寫指令碼檢測哪些使用者可以登入主機

[[email protected] shell]# vim user_check.sh
#!/bin/bash
SHELL=$(echo `grep -v nologin /etc/shells`|sed 's/ /|/g')
grep -E "$SHELL" /etc/passwd | cut -d : -f 1
[[email protected] shell]# sh user_check.sh 

這裡寫圖片描述
指令碼內容
這裡寫圖片描述

二、sed行編輯器

1. 基本介紹
1)sed行編輯器

stream editor
用來操作純 ASCII 碼的文字處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space)可以指定僅僅處理哪些行,sed 符合模式條件的處理,不符合條件的不予處理,處理完成之後把緩衝區的內容送往螢幕,接著處理下一行,這樣不斷重複,直到檔案末尾。

2)呼叫 sed 命令有兩種形式:
            sed [options] 'command' file(s)
            sed [options] -f scriptfile file(s)
3)選項
 -n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的資料一般都會被列出到螢幕上。 
 但如果加上 -n 引數後,則只有經過 sed 特殊處理的那一行(或者動作)才會被列出來。
-e :直接在命令列介面上進行 sed 的動作編輯;
-f :直接將 sed 的動作寫在一個檔案內,-f filename 則可以執行 filename 內的 sed 動作;
-r :sed 的動作支援的是延伸型正則表示式的語法。(預設是基礎正則表示式語法)
-i :直接修改讀取的檔案內容,而不是由螢幕輸出。
4)sed 對字元的處理

p 顯示
d 刪除
a 新增
c 替換
w 寫入
i 插入

2.sed 的常見操作
1) p顯示

例如:

[root@sunshine shell]# sed -n '/\:/p' fstab        #顯示有:的行
[root@sunshine shell]# sed -n '/UUID$/p' fstab     #顯示UUID結尾的行
[root@sunshine shell]# sed -n '/^UUID/p' fstab     #顯示UUID開頭的行
[root@sunshine shell]# sed -n '2,6p' fstab         #顯示2到6行
[root@sunshine shell]# sed -n '2,6!p' fstab        #不顯示2到6行
[root@sunshine shell]# cat -n fstab | sed -ne '2!p;6!p' | uniq -d #不顯示第二行>
和第六行

這裡寫圖片描述
這裡寫圖片描述

指令碼編寫例項:
編寫指令碼建立使用者,使用者名稱為userfile裡面的內容,密碼為passwordfile裡面的內容

[[email protected] shell]# vim user_create.sh
#!/bin/bash
MAX_LINE=`wc -l $1 | cut -d " " -f 1`
for LINE_NUM in `seq 1 $MAX_LINE`
do
     USERNAME=`sed -n "${LINE_NUM}p" $1`
     PASSWORD=`sed -n "${LINE_NUM}p" $2`
     useradd $USERNAME
     echo $PASSWORD | passwd --stdin $USERNAME
done
[[email protected] shell]# sh user_create.sh userfile passwordfile 

指令碼及檔案內容:
這裡寫圖片描述
這裡寫圖片描述
執行結果:
這裡寫圖片描述

2)a新增(預設新增到關鍵字下面一行)
[root@sunshine shell]# sed -e '/hello/aworld' file
3)i 插入(預設插入到關鍵字上面一行)
[root@sunshine shell]# sed -e '/hello/iworld' file
4)c 替換
[root@sunshine shell]# sed -e '/hello/cworld' file
5)d 不顯示
[root@sunshine shell]# sed -e '/^#/d;/^$/d' fstab

這裡寫圖片描述
這裡寫圖片描述

6)w 寫入
[root@sunshine shell]# sed '/^UUID/w file' fstab                #儲存到檔案並顯示
[root@sunshine shell]# sed -n '/^UUID/w file' fstab             #儲存到檔案不顯示

這裡寫圖片描述
這裡寫圖片描述

7)sed其他用法
[[email protected] shell]# sed '/^UUID/= ' fstab                    #顯示UUID的行數,結果和內容
[[email protected] shell]# sed -n -e '/^UUID/p' -e '/^UUID/= ' fstab#顯示UUID的行數,只顯示結果
[[email protected] shell]# sed 'G' fstab                            #每行後加空行
[[email protected] shell]# sed '$!G' fstab                          #每行後加空行,不包括最後一行
[[email protected] shell]# sed 's/nologin/linux/g' passwd           #替換,g表示全文替換
[[email protected] shell]# sed -e '/adm/,/sync/s/nologin/linux/g' passwd 
[[email protected] shell]# sed 's/nologin/linux/g' -i  passwd       #替換並儲存
[[email protected] shell]# sed '=' test | sed 'N; s/\n/ /'  #成行號,並將兩行間的換行變成空格

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

三、awk報告生成器

awd 報告生成器基本用法
awk處理機制:awk會逐行處理文字,支援在處理第一行之前做一些準備工作以及在處理完最後一行做一 些總結性質的工作,在命令格式上分別體現如下:
BEGIN{ }:讀入第一行文字之前執行,一般用來初始化操作
{ }:逐行處理,逐行讀入文字執行相應的處理,是最常見的編輯指令
END{ }:處理完最後一行文字之後執行,一般用來輸出處理結果
linux上面預設使用 gawk

1. awk 通過 print 的功能將欄位資料列出來
1)方式一
 awk -F : '{print NR " " NF " " $1  }' passwd
     -F :分隔符型別,預設為空格
     NR :第幾行
     NF :有幾列
     $1 :以“:”為分隔符的第一列資料

這裡寫圖片描述

2)方式二
 awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd
      # BEGIN {print "NAME"} 處理資料前,執行顯示"NAME"字元
      # END {print "END"} 處理資料後,執行顯示"END"字元

這裡寫圖片描述

2. 一些其他的用法表達
1)
 awk '/bash$/' passwd   # 列出以 bash 結尾的行

這裡寫圖片描述

2)統計一個檔案有多少行
awk 'BEGIN{N=0}{N++}END{print N}' /etc/passwd

這裡寫圖片描述

3)對指定行與內容進行顯示
 awk -F : '/^ro/{print}' passwd
     # 以:為分隔符,顯示以 ro 字元開頭的行
 awk -F : '/^[a-d]/{print $1,$6}' passwd
     # 顯示以字母 a-d 開頭的行的第 1 列,第 6 列
 awk -F : '/^a|nologin$/{print $1,$7}' passwd
     # 顯示以 a 開頭,以 nologin 結尾的行的第 1 列,第 7 列
 awk -F : '$6~/bin$/{print $1,$6}' passwd
     # 顯示從第 6 列開始,以 bin 結尾的列所在行的第 1 列,第 6 列 
 awk -F : '$7!~/nologin$/{print $1,$6}' passwd
     # 顯示除了從第 7 列開始以 nologin 結尾的行的第 1 列,第 6 列

相關推薦

SHELL文字處理三劍客sedgrepawk

一、grep文字過濾器 1. 基本介紹 Global search regular expression and print out theline 全面搜尋研究正則表示式並顯示出來 grep命令是一種強大的文字搜尋工具根據使用者指定的

02-shell文字處理三劍客sed

sed 是流編輯器,但是它不會修改原始檔。 sed (流文字編輯器) 用法:sed OPTIONS… [SCRIPT] [INPUTFILE…] -r: 使用擴充套件的正則表示式; -n, –quiet, –silent: 不輸出模式空間的內容; -i:直接編輯原檔案; -

運維之路-文字處理-三劍客grepsedawk

轉載:https://blog.csdn.net/zisefeizhu/article/details/82526749 目錄  grep 支援的正則 描述 輸出控制 描述 內容行控制 描述 示例: sed Usage: 命令 描述 地址 描述 匹配刪除(d)  替

shell文字處理三劍客(awk sed grep)

一.grep:文字過濾器 根據正則表示式來工作,由正則表示式或者字元及基本的文字字元所編寫的過濾條件 tr 'a-z' 'A-Z' < file          ###把passwd中的小寫轉換為大寫 ^x      ###以x開頭的 x$      ###以

01-shell文字處理三劍客grep

開篇:哈嘍,今天我想寫寫shell程式設計,打算平均一天一篇吧,這樣一個月後就可以進步比較多。 先從shell文字處理三劍客grep、sed、awk開始。聽說啊,要是我不會這個命令,就不好意思說自己會shell程式設計。 1 grep是什麼意思? grep: Global se

4.shell程式設計-文字處理三劍客sed

4.1.sed的選項  sed,流編輯器。對標準輸出或檔案進行逐行處理。 語法格式 第一種:stdout | sed [option] "pattern command" 第二種:sed [option] "pattern command" file  選項 -n&

linux文字處理三劍客awk命令詳解

簡介 awk是一個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。 awk有3個不同版本: awk、nawk和gaw

Linux文字處理三劍客awksedgrep入門

AWK命令簡介 AWK是一門解釋型的程式語言,它的名字來源於它的三位作者的姓氏:Alfred Aho,Peter Weinberger和Brian Kernighan。AWK能夠應用於廣泛的計算和資料處理任務。所有的GNU/Linux發行版都自帶GAWK,即GNU AWK,

文字處理三劍客 grep sed awk

一、正則表示式       正則表示式是對字串(包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為“元字元”))操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個 “規則字串”用來表達對字串的一種過濾邏輯。正則表示

sedgrepawk -- 三劍客筆記記錄

left 操作筆記 str config rep strong 提取文件 awk cat sed常用操作筆記 1.刪除文件最後一行: sed -i ‘$d‘ filename 2.遞歸替換內容:sed -i ‘s/內容A/內容B/g‘ filename    sed -

2018-06-04筆記正則grepsedawk工具

linux9.1 正則介紹 正則表達式,又稱規則表達式,計算機科學的一個概念,正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯,在很多文本編輯器或其他工具裏,正則表達式通常被用來檢索和/或替換

文字處理三劍客grep

grep:根據使用者指定的“模式”對目標文字進行匹配檢查,列印匹配到的行 模式:用正則表示式字元所編寫的過濾條件 grep [option] pattern [file...] --color=auto:對匹配到的文字著色顯示 -v:顯示不能夠被pattern匹配到的行 -

shell指令碼之正則表示式函式grepsedawkprintf等基本命令配置詳解

一、正則表示式 簡介: 正則表示式(或稱Regular Expression,簡稱RE)就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進

Shell程式設計5_文字處理三劍客(awk)

文字處理三劍客(awk) 1.awk介紹 AWK:三位創造者Aho、Weinberger和Kernighan統稱 官方定義:一個優秀的樣式掃描與處理工具 定位:AWK是一種用於處理文字的程式語言工具,主要用於格式化報文或從一個大的文字檔案中抽取資

三劍客基礎詳解(grepsedawk)

字符操作 解釋 一行 nan 怎麽 you 初見 至少 才會 三劍客基礎詳解 三劍客之grep詳解 通配符與正則表達式這兩口子可以說貫穿三劍客始終,甚至時貫穿linux始終,這樣說,我覺得並不誇張。因此在寫三劍客之前,先捋一捋這些這些知識點就很有必要了。 相對而言正則用於

sed——Shell 文字處理利器

一、簡介 sed全稱是stream editor,是一個用於文字過濾和替換的流編輯器,它是一個管道命令,資料來源來自stdin,它的最小處理單位是行(與awk區分)。 二、語法 語法如下: sed [-nfri] [動作] -n:使用安靜模式。只

文字處理三劍客awk原創

AWK是一種優良的文字處理工具,Linux及Unix環境中現有的功能最強大的資料處理引擎之一。這種程式設計及資料操作語言(其名稱得自於它的創始人阿爾佛雷德·艾侯(Alfred Aho)、彼得·溫伯格(Peter Jay Weinberger)和布萊恩·柯林漢(Brian Wi

shell指令碼】常用工具的學習grepsedawkcut

grep 功能: 查詢過濾工具,查詢或者過濾出符合某個模式的字串,可以和正則表示式搭配使用。 所以本篇部落格適合有正則表示式基礎的讀者閱讀哦~。 用法: grep '正則表示式' 操作的檔名 egrep '正則表示式' 操作的檔名 grep -

shell文字過濾程式設計grep和正則表示式

Linux系統中有很多檔案,比如配置檔案、日誌檔案、使用者檔案等。檔案中都包含了大量的資訊,我們可以使用cat等命令輕鬆將其輸出到螢幕,但如果要從檔案中分析或提取資料,還需要其他工具來實現。而linux正好提供了這些工具:grep、awk、sed等。把這些工具使用好,可以

shell腳本-正則grepsedawk

語句 command 選項 交換 space 比較 修飾符 com 正則匹配 --正則-- 基礎正則 ^word ##搜索以word開頭的 vi/vim中 ^ 一行的開頭 word$ ##搜索以word結尾的 vi/vim中 $ 一行的結尾 ^$