笔记之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

此博文仅为学习笔记只用,还有很多不足,请大家指出。