文字處理正規表示式

2021-09-26 08:27:16 字數 4119 閱讀 1758

文字過濾命令:全面搜尋研究正規表示式並顯示出來

grep 命令是一種強大的文字搜尋工具 , 根據使用者指定的「模式」對目標文字進行匹配檢查 , 列印匹配到的行

由正規表示式或者字元及基本文字字元所編寫的過濾條件

預設貪婪模式 ##有就能過濾出來

egrep = grep -e

擴充套件正規表示式

grep 正規表示式與擴充套件正規表示式

正規的grep不支援擴充套件的正規表示式子 , 豎線是用於表示」或」的擴充套件正規表示式元字元 , 正規的 grep 無法識別.

加上反斜槓 , 這個字元就被翻譯成擴充套件正規表示式 , 就像 egrp 和 grep -e 一樣

格式

grep 匹配條件 處理檔案 

grep root passwd ##過濾有root的選項

grep ^root passwd ##以root開頭的選項

grep root$ passwd ##以root結尾的選項

grep -i "root" passwd ##忽略大小寫查詢有root的項

grep -e "root|root" passwd

##擴充套件正規表示式;『|『或的關係root|root都可以被過濾出來

grep root passwd -n2 ##過濾並顯示這一行的上下各兩行

字元的匹配次數設定

加在字元後面

'.'表示乙個字元

* 			##字元出現0-任意次 

\? ##字元出現0-1次

\+ ##字元出現1-任意次

\ ##字元出現n次

| ##字元出現最少出現m次,最多出現n次

\ ##字元出現 0-n次

\ ##字元出現至少m次

\(xy\)\xy ##關鍵字出現n 次

.* ##關鍵字之間匹配任意字元

grep -e "xy" file ##過濾x字元出現一次的項

grep -e "(xy)" file ##過濾xy至少出現1次的項

字元的匹配位置設定

^ 關鍵字		##開頭

關鍵字 $ ##結尾

\< 關鍵字 ##只以這個單詞開頭

關鍵字 \> ##只以這個單詞結尾

\< 關鍵字 \> ##只含這個單詞

行編輯器:stream editor

用來操作純 ascii 碼的文字

快取空間

處理時 , 把當前處理的行儲存在臨時緩衝區中 , 稱為「模式空間」 (pattern space) 可以指定僅僅處理哪些行

sed符合模式條件的處理,不符合條件的不予處理

處理完成之後把緩衝區的內容送往螢幕

接著處理下一行 , 這樣不斷重複 , 直到檔案末尾

p		##多顯示

-n p ##單顯示

d ##不顯示

!d = -n p

i ##上插入

a ##下新增

c ##剪下

w ##將某一行匯入某檔案

\ ##表示轉譯

eg: \/ ##將有特殊含義的/轉譯為普通的/

n ##提前載入檔案中下一行到sed程式中

-i ##儲存修改

p模式

顯示

sed -n '/\:/p' file

sed -n '/xx$/p' file

sed -n '/^xx/p^' file

sed -n '2,6p' file ##顯示2-6行

sed -n '2;6!p' file ##不顯示2和6行

d模式

不顯示

sed '/^xx/d' file		##xx開頭的不顯示

sed '1,4d' file

sed -n '/^xx/!d' file ##顯示xx開頭的行

a模式

sed '/^xx/a\***x' file		##在xx開頭的行下新增一行***x

sed '/^xx/a\***x\n***x' file ##在xx開頭的行下新增兩行***x

i模式

sed '/^uuid/i\hello sed\nwestos' file	##在uuid開頭的行下新增兩行
c模式

change

sed '/^uuid/c\hello sed\nwestos' file		##將uuid開頭的行換成\hello sed\nwestos兩行內容
w模式

sed '/^xx/w /檔案路徑' file	##將xx開頭的寫入檔案

sed -n '/^xx/w /檔案路徑' file

sed '/^xx/=' file ##在xx開頭的行上方新增行號

sed '6r /檔案路徑' file ##將檔案的第六行寫入file檔案

其他用法

sed -n '/^uuid/=' file

sed -n -e '/^uuid/p' -e '/^uuid/=' fstab

sed -e 's/brown/green/; s/dog/cat/' data

sed -f rulesfile file ##根據rulesfile的內容對檔案做更改

sed 's/^\//#/'/etc/fstab ##把開頭的/變成#

sed 's@^/@#@g'/etc/fstab

sed 's/\//#/'/etc/fstab ##把每一行的第乙個/變成#

sed 's/\//#/g/'/etc/fstab ##全文的/變成#

sed 'g' data ##在每一行下方加空行

sed '$!g' data ##最後一行不加

sed '=' file | sed 'n; s/\n/ /' ##在檔案每一行開頭加行號

sed -n '$p' file ##檢視最後一行

linux 上面預設使用 gawk

awk 處理機制 :awk 會逐行處理文字 , 支援在處理第一行之前做一些準備工作 , 以及在處理完最後一行做一些總結性質的工作 , 在命令格式上分別體現如下 :

begin{}: 讀入第一行文字之前執行 , 一般用來初始化操作

{}: 逐行處理 , 逐行讀入文字執行相應的處理 , 是最常見的編輯指令

end{}: 處理完最後一行文字之後執行 , 一般用來輸出處理結果

用法

awk '' file			##列印檔案名

awk '' file ##第nr行,有nf列

awk -f : '/^ro/' /etc/passwd

awk -f : 'begin end' ##:做分隔符列印第一部分,並在開頭加上name,結尾加上end

awk -f : '/^[a-d]/' /etc/passwd

awk -f : '/^a|nologin$/' /etc/passwd

awk -f : '$6~/bin$/' /etc/passwd ##列印第六列是以bin結尾的行的1,6列

awk -f : '$7!~/nologin$/' /etc/passwd

awk -f : '' ##列印所有,帶分隔符:

awk -f : '' ##第一列為0,列印剩下的,不帶分隔符

eg:ifconfig etho | awk '/inet\>/' ##抓取eth0網絡卡的ip

文字處理 grep 正規表示式

i 區分大小寫 root centos7 root2018 07 30 cat grep test root root2 zhuzhu2 tom3 root centos7 root2018 07 30 grep o oo grep test oooo root centos7 root2018 0...

正規表示式和文字處理器

fs 指定每行文字的字段分隔符,預設為空格或製表位 nf 當前處理的行的字段個數 nr 當前的行的行號 序數 0 當前的第n個字段 第n列 rs 資料記錄分隔,預設為 n,即每一行一條記錄 逐行讀取文字,預設以空格為分隔符進行分隔,將分隔所得的哥哥字段儲存到內建變數中,並按模式或者條件執行編輯命令 ...

Linux入門 文字處理和正規表示式

1 文字處理基本操作 more less 逐屏顯示文字,一般用在很長的檔案檢視 head tail 檢視檔案頭幾行或者末尾幾行 head ntail nwc word count,對於文字進行計數 wc l 按照回車符計算有多少行wc c 計算有多少單詞tr translate 翻譯字元,可以將乙個...