国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

鳥哥的linux私房菜——第12章 正則表達式與文件格式化處理

2024-06-28 13:24:49
字體:
來源:轉載
供稿:網友
鳥哥的linux私房菜——第12章 正則表達式與文件格式化處理

12.1什么是正則表達式

正則表達式就是處理字符串的方法,它是以行為單位來進行字符串的處理行為,正則表達式通過一些特殊符號的輔助,可以讓用戶輕易達到查找、刪除、替換某特定字符串的處理程序。

vi、grep、awk、sed支持正則表達式,而cp,ls等命令只能使用bash自身的通配符

12.2基礎正則表達式

grep高級參數:

grep [-A] [-B] [--color=auto] 'string' filename

-A:after的意思,除了列出該行外,后續的n行也列出來

-B:before的意思,除了列出該行外,前面的n行也列出來

--color=auto 可將正確的那個選取數據列出顏色

基礎正則表達式練習:

例一:查找特定字符串

grep -n ‘the’ regular_exPRess.txt

grep -vn 'the' regular_express.txt  (-v反向選擇)

例二:利用中括號[]來查找集合字符

grep -n 't[ae]st' regular_express.txt  (可匹配test或tast)

grep -n '[^g]oo' regular_express.txt  (oo前不能有g的字符)

grep -n '[^[:lower:]]oo' regular_express.txt  ([:lower:]代表a-z的意思)

例三:行首和行尾字符

grep -n '^test' regular_express.txt

(注:^在[]內表示“反向選擇”,在[]外表示定位在行首)

grep -n '/.$' regular_express.txt  (找出行尾結束為小數點的那一行)

例四:任意一個字符.與重復字符*

grep -n ‘g..d’ regular_express.txt   (可匹配good,glad等字符)

grep -n 'ooo*' regular_express.txt  (匹配至少兩個o以上的字符)

grep -n 'g.*g' regular_express.txt    (找出g開頭與g結尾的字符串,.*表示o個或多個任意字符的意思)

例五:限定連續RE字符范圍{}

grep -n 'o/{2/}' regular_express.txt  (找出兩個o的字符串)

grep -n ‘go/{2,5/}g’ regular_express.txt  (g后有兩個到5個o,然后接一個g的字符串)

grep -n ‘go/{2,/}g’ regular_express.txt  (g后有兩個及以上的o,然后接一個g的字符串)

基礎正則表達式字符:

^Word :待查找的字符串(word)在行首

word$ :待查找的字符串(word)在行尾

. :代表一定有一個任意字符的字符

/ : 轉義字符,將特殊符號的特殊意義去除

* : 重復0個或多個的前一個字符

[list] :從字符集合的RE字符里面找出想要選取的字符

[n1-n2]:從字符集合的RE字符里面找出想要選取的字符范圍

[^list] :從字符集合的RE字符里面找出不要的字符串或范圍

/{n,m/}:連續n到m個的前一個RE字符,/{n/}表示連續n個,/{n,/}表示連續n個及以上

sed工具:(詳見sed & awk)

格式:sed [-nefr] [動作]

參數:

-n :使用安靜模式,在一般的sed用法中,所有來自STDIN的數據一般都會被列到屏幕上,但如果加上-n參數后,則只有經過sed特殊處理的那一行才會被列出來

-e :直接在命令行模式上進行sed的動作編輯

-f :直接將sed的動作寫在一個文件內,-f filename 則可以執行filename內的sed動作

-r :sed的動作支持的擴展型正則表達式的語法

-i :直接修改讀取的文件內容,而不是由屏幕輸出

動作說明:[n1,[n2]] function

n1,n2不見得會存在,一般代表選擇進行動作的行數

function參數:

a :新增,a的后面可以接字符串,而這些字符串會在目前的下一行出現

i :插入,i 的后面可以接字符串,而這些字符串會在目前的上一行出現

c :替換,c的后面可以接字符串,這些字符串可以替換n1,n2之間的行

s :替換,可以直接進行替換工作,通常這個s可以搭配正則表達式

d :刪除,因為是刪除,所以d后面通常不接任何參數

p :打印,也就是將某個選擇的數據打印出來,通常p會與參數sed -n一起運行

12.3擴展的正則表達式

+ :重復一個或多個的前一個RE字符

? :0個或一個的前一個RE字符

| :用或的方式找出字符串

() :找出“組”的字符串  (如:egrep -n ‘g(la|oo)d’ regular_express.txt 表示找出glad或good字符串)

()+:多個重復組的判別  (如echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C' 找出開頭是A結尾是C,中間有一個以上的“xyz”字符串)

12.4文件的格式化與相關處理

格式化打印 printf:

格式:printf '打印格式' 實際內容

格式方面的幾個特殊樣式:

  /a 警告聲音輸出

  /b 退格鍵

  /f 清除屏幕

  /n 輸出新的一行

  /r 亦即Enter按鍵

  /t 水平的tab按鍵

  /v 垂直的tab按鍵

  /xNN NN為兩個數字,可以轉換數字成字符

關于C語言內,常見的變量格式

  %ns :n代表數字,s代表string,即多個字符

  %ni : n代表數字,i代表interger,即多少整數字數

  %N.nf :n和N都是數字,f代表float,如十個位數,小數點兩位為 %10.2f

awk工具 (詳見sed & awk):

格式:awk ‘條件類型1{動作1} 條件類型2{動作2} ...’ filename

awk主要是處理每一行的字段內的數據,而默認的字段的分割符為空格鍵或tab鍵

變量:

NF : 每一行($0)擁有的字段總數

NR :目前awk所處理的是“第幾行”數據

FS :目前的分隔字符,默認是空格鍵

邏輯運算符:

>  <  >=  <=  ==  !=

例:

cat /etc/passwd | awk '{FS=":"} $3<10 {print $1 "/t" $3}'

cat pay.txt | awk '{if(NR==1) printf "%10s %10s,%10s/n",$1,$4,"Total"} NR>=2 {total=$1+$4 printf "%10s %10d %10.2f/n",$1,$3,total}'

文本比較工具diff:

diff用于比較兩個文件之間的區別,并且是以行為單位的,diff也可以比較兩個目錄

格式:diff [-bBi] from-file to-file

-b :忽略一行當中僅有多個空白的區別(如“about me”和“about me”視為相同)

-B:忽略空白行的區別

-i:忽略大小寫的區別

patch -pN <patch_file  更新

patch -R -pN <patch_file  還原

范例:以/tmp/test內的passwd.old 與passwd.new 制作補丁文件,并更新舊版數據

diff -Naur passwd.old passwd.new >passwd.patch

更新舊文件,變成和新文件一樣

patch -p0 <passwd.patch

(pathing file passwd.old)

恢復舊文件的內容

patch -R -p0 <passwd.patch

文件打印pr:

pr /etc/man.config  (打印文本文件man.config)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 营口市| 凭祥市| 高淳县| 赤水市| 靖安县| 屯门区| 中阳县| 济宁市| 临猗县| 吉林市| 莱阳市| 会同县| 宁南县| 商水县| 招远市| 上杭县| 瓦房店市| 乌恰县| 错那县| 博罗县| 临朐县| 通道| 安化县| 峨山| 自贡市| 清水河县| 江陵县| 绥德县| 晋城| 左贡县| 凤城市| 凤城市| 鄂托克前旗| 司法| 德江县| 安仁县| 健康| 崇阳县| 满洲里市| 遂溪县| 新和县|