基礎正則表達式字符和sed工具

1.正則表達式特殊字符歸納

RE字符 意義與範例
^word 意義:待查找的字符串(word)在行首 範例:查找行首爲#開始的那一行,並列出行號 grep-n ‘^#’ regular_expresss.txt
word$ 意義:待查找的字符串(word)在行尾 範例:查找行尾爲!的那一行打印出來,並列出行號 grep-n ‘^!$’ regular_expresss.txt
. 意義:代表一個一定有任意字符的字符 範例:查找的字符串可以是eve eae eee ,但不能僅有(ee)!即e與e中間“一定”僅有一個字符,而空格符也是一個字符 grep-n 'e.e‘ regular_expresss.txt
\ 意義:轉義字符,將特殊符號的特殊意義去除 範例:找出特有含有單引號’的那一行 grep-n 'regular_express.txt
* 意義:重複零個到無窮多個的前一個字符
[list] 意義:從字符集合的RE字符裏面找出想要選取的字符
[[n1-n2] 意義:從字符集合的RE字符裏面找出想要選取的字符範圍
[^list] 意義:從字符集合的RE字符裏面找出不要的字符串或範圍
\{n,m\} 意義:連續n到m個前一個RE字符,若爲\{n\}則是連續n個的前一個RE字符,若爲{n,\}則是連續n個以上的前一個RE字符

強調

正則表達式的特殊字符與一般再命令行輸入命令的通配符並不相同。

2.sed工具

sed本身也是一個管道命令,可以分析standard input的,而且sed還可以將數據進行替換、刪除、新增、選取特定行爲等功能。

sed [-nefr] [動作]
參數:
-n:使用安靜(silent)模式,在一般sed的用法中,所有來自STDIN的數據一般都會被列在屏幕上。
但如果加上-n參數後,則只有經過sed的特殊處理的那一行(或者操作)纔會被列出來。
-e:直接在命令行模式上進行的sed動作編輯。
-f:直接將sed的動作寫在一個文件裏面,-f filename 則可以執行filename內的sed動作
-r:sed的動作支持的是擴展型正則表達式的語法
-i:直接修改讀取的文件內容,而不是有屏幕輸出。
動作說明: [n1,[n2]]function
n1,n2 : 不見得會存在,一般代表選擇進行的動作的行數,例如:
如果我的動作是需要在10到20 之間進行的,則"10,20[動作行爲]"
function 有下面這些參數:
a : 新增,a的後面可以接字符串,而這些字符串會在新的一行出現(目前的下一行)。
c : 替換,c的後面可以接字符串,而這些字符串可以替換n1,n2之間的行!
d : 刪除,因爲是刪除,所以d的後面通常不接任何參數;
i : 插入,i的後面可以接字符串,而這些字符串會在新的一行出現(目前的上一行)。
p : 打印,也就是將某個選擇的數據打印出來,通常p會與參數sed -n 一起運行。
s : 替換,可以直接進行替換的工作,通常這個s的動作可以搭配正則表達式!
例如:
將/etc/passwd的內容列出並且打印行號,同時將第2~5行刪除
n1 /etc/passwd | sed '2,5d'
刪除3-最後一行
n1 /etc/passwd | sed '3,$d'
在第二行後面加上“drink tea”
n1 /etc/passwd |sed '2a drink tea'
在第二行前面加上“drink tea”
n1 /etc/passwd |sed '2i drink tea'
在第二行後面增加兩行
n1 /etc/passwd |sed '2a drink tea \ 
>drink beer '
替換:將第2-5行的內容替換成“No 2-5 number”
n1 /etc/passwd | sed ‘2.5c No 2-5 number’
僅列出第5-7行
n1 /etc/passwd | sed -n '5,7p'

注意
命令中有個重要的參數 -n ,按照說明文件,這個-n代表的是“安靜模式”,不加安靜模式的話,第5-7行就會重複輸出。

直接修改文件的內容(危險操作

sed -i 's/\.$/\!/g' regular_express.txt
將regular裏面的每一行結尾爲“.”的改爲“!”

-i: 可以直接修改文件內容,當文件過大時不適合用vi打開時,就可以利用sed直接修改或者替換的功能。

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