筆記之sed工具

筆記之sed工具

基礎正則表達式特殊字符歸納表:

RE字符

意義

^word

意義:待查找的字符串(word)在行首。

word$

意義:帶查找的字符串(word)在行尾。

.

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

\

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

*

意義:重複零個到無窮多個的前一個字符。

[list]

意義:從字符集合的RE字符裏面找出想要選取的字符。

grep -n 'g[ol]d' test.txt#查找出god,gld字符。

[n1-n2]

意義:從字符集合的RE字符裏面找出想要選取的字符範圍。

grep -n '[0-9]' test.txt

grep -n '[a-z]' test.txt

grep-n '[A-Z]' test.txt

[^list]

意義:從字符集合的RE字符裏面找出不要的字符串或範圍。

^[]內時,代表的意義是“反向選擇”的意思。不要大寫[^A-Z] [^a-z]

[^0-9] 表示反向的提取。不過,如果每行裏有大寫和小寫字符,如果使用grep -n '[^A-Z]' test.txt 那麼,含有小寫字符的行,就會被列出來。

\{n,m\}

意義:連續nm個的前一個RE字符,若爲\{n\}則是連續n個的前一個RE字符,若爲\{n,\}則是連續n個以上的前一個RE字符

範例:在gg之間有2個到3個的o存在的字符串,即(goog(gooog)grep -n  'go\{2,3\}g' test.txt

sed工具

sed[-nefr] 動作

參數:

-n:使用安靜模式,一般sed的用法中,所有數據都會被列出到屏幕上,使用-n那就只用被處理過的那行,纔會列舉到屏幕上。

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

-f:直接將sed的動作卸載一個文件內,-ffilename則可以執行filename內的sed動作。

-rsed的動作支持的是擴展正則表達式的語法。

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

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

n1,n2:不見得會存在,一般代表選擇進行動作的行數,舉例來說,如果我的動作是需要在1020行之間進行的,則“10,20[動作行爲]

function有下面這些參數:

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

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

d:刪除,因爲是刪除,所以d後面通常不接任何參數。

i:插入,i的後面可以接字符串,而這些字符串會在新的一行出現(當前的上一行)

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

s:替換,可以直接進行替換的工作,通常這個s的動作可以搭配正則表達式!例如1,20s/old/new/g

[root@mysql data]# nl test2.txt #這是完整的test2文本文件,以下的例子我們都由它來舉例。

1woshi 111

2tashi 234

3woshi 456

4tashi 678

5kajdklfjalskd

6sdlkjflka

7lksdjflkasd

※以行爲單位的新增,刪除功能

[root@mysql data]# nl test2.txt |sed '5,7d'#刪除57行。

1woshi 111

2tashi 234

3woshi 456

4tashi 678

[root@mysql data]# nl test2.txt |sed '5,$d'#刪除5到最後一行。

1woshi 111

2tashi 234

3woshi 456

4tashi 678

[root@mysql data]# sed -e '4a hahah'test2.txt |nl #新增一行字符數據。(在第4行下)

1woshi 111

2tashi 234

3woshi 456

4tashi 678

5hahah

6kajdklfjalskd

7sdlkjflka

8lksdjflkasd

[root@mysql data]# sed -e '4i hahah'test2.txt |nl #新增一行字符數據。(在第4行上)

1woshi 111

2tashi 234

3woshi 456

4hahah

5tashi 678

6kajdklfjalskd

7sdlkjflka

8lksdjflkasd

※以行爲單位的替換,顯示功能

[root@mysql data]# sed '3,5c dajiadoushi'test2.txt |nl#該爲替換35行爲後面的字符數據。

1woshi 111

2tashi 234

3dajiadoushi

4sdlkjflka

5lksdjflkasd

[root@mysql data]# sed '5,7p' test2.txt #加上-n與不加的效果,顯而易見。

woshi 111

tashi 234

woshi 456

tashi 678

kajdklfjalskd

kajdklfjalskd

sdlkjflka

sdlkjflka

lksdjflkasd

lksdjflkasd

[root@mysql data]# sed -n '5,7p' test2.txt #這是加-n的顯示。

kajdklfjalskd

sdlkjflka

lksdjflkasd

※數據查找並替換的功能

sed's/需要被替換的字符串/新字符串/g'或者 sed 's###g'

提示:如果s///g後面的g去掉的話,表示替換每行的第一個匹配的字符串。

如果不去掉g,那麼表示替換說有匹配的字符串。

同時,如果///內出現變量等內容,注意需要使用雙引號。

:1:截取本地計算機eth0IP地址。

[root@mysql data]# ifconfig eth0

eth0Link encap:EthernetHWaddr00:0C:29:14:88:2A

inet addr:192.168.126.128Bcast:192.168.126.255Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe14:882a/64 Scope:Link

UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1

RX packets:19521 errors:0 dropped:0 overruns:0 frame:0

TX packets:17277 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:3893186 (3.7 MiB)TXbytes:1690940 (1.6 MiB)

Interrupt:67 Base address:0x2000

[root@mysql data]# ifconfig eth0|grep 'inetaddr:'|sed 's/^.*addr://g'|sed 's/Bcast.*$//g'

192.168.126.128

範例2:更改test2.txt文件中tashi替換爲no

[root@mysql data]# cat test2.txt

woshi 111

tashi 234

woshi 456

tashi 678

kajdklfjalskd

sdlkjflka

lksdjflkasd

[root@mysql data]# sed 's/tashi/no/g'test2.txt #具體命令操作方法。提示:如果想更改,需要加參數-n

woshi 111

no 234

woshi 456

no 678

kajdklfjalskd

sdlkjflka

lksdjflkasd

範例3:替換文本中第一行第一個匹配的字符串。

[root@mysql ~]# cat test2.txt

woshi 111

tashi 234

woshi 456

tashi 678

[root@mysql ~]# sed '0,/woshi/ s/\(woshi \).*/\1999/'test2.txt

#剖析:

0,/woshi/:數字0表示從0-1取兩個匹配“/字符串/”的行,該參數需要結合s///g使用。使用位置最前方,表示提取並保留的行。

\(woshi\).*:匹配原有字符串,其中小括號需要轉義,因爲有空格符。“.*”表示有一個或多個字符。

\1999:其中“\1”代表替換,“\0”代表在原有字符串後累加。

woshi 999

tashi 234

woshi 456

tashi 678

其他範例:對文本中的數據進行技術統計。

[root@mysql data]# cat test3.txt

woshi 111

woshi 111

woshi 111

tashi 234

woshi 456

woshi 456

tashi 678

tashi 678

tashi 678

kajdklfjalskd

sdlkjflka

lksdjflkasd

[root@mysql data]# grep'[0-9]' test3.txt|sort -n |uniq -c

1 tashi 234

3 tashi 678

3 woshi 111

2 woshi 456

此博文僅爲學習筆記只用,還有很多不足,請大家指出。

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