玩Linux笔记 —— 《sed与awk》读书笔记 (1)

昨天从同事那里拿来这本书——http://book.douban.com/subject/1236944/, sed和awk这俩工具一直在用,但学习的途径来自很多地方,主要是博客、论坛和别人的代码。因此感觉很多东西掌握的不够系统,用午饭休息的时间认真读这本书,打算系统的来学习一下。

1. 关于ed的使用

无论学习什么东西我们都是在学习它的历史。ed是UNIX下最早的行编辑器,后来的sed、vi以及grep等工具都是基于ed衍生出来的。百科上是这么说的,sed是ed的直系后代,是stream editor的缩写;vi是Bill Joy对ed不满意而开发出来的。稍后可以看到vi和sed中很多编辑命令的模式跟ed是类似的。

ed的基本使用,首先创建一个普通的文本文件名叫list, 内容如下:

John Daggest, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK
Terry Kalkasm, 402 Lans Road, Beaver Falls PA
Eric Adams, 20 Post Road, Sudbury MA
Hubert Sims, 328A Brook Road, Roanoke VA
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA
Sal Carpenter, 73 6th Street, Boston MA
使用ed打开文件的时候它将定位到文件的最后一行并显示出当前文件的字符数目:

samchi@ubuntu:~/works/myworks/shell$ ed list
342
这时候可以输入编辑命令来进行交互式的操作,比如打印当前行:

p
Sal Carpenter, 73 6th Street, Boston MA
直接输入行数就可以移动到想要编辑的行,比如:

1
John Daggest, 341 King Road, Plymouth MA
如果要删除这一行,只需要输入命令"1d"就可以了。也可以支持正则删除,比如:

/VA/d
该命令会将包含"VA"的行删掉。

如果前面加上字母"g", 那么会把所有的包含VA的行删掉

g/VA/d
在ed中也可以替换文本,替换的指令跟在vi当中类似:

[address] s/pattern/replacement/flag
比如我们有个文本文件只有一行内容:

SamChi, SamChi
用ed进行替换操作:

samchi@ubuntu:~/works/myworks/shell$ ed edtest 
14
s/Sam/Jack/
1
JackChi,SamChi
此行只有一个Sam被替换掉了,如果要替换所有的Sam呢?就需要在后面加一个flag,也就是g

samchi@ubuntu:~/works/myworks/shell$ ed edtest 
14
1
SamChi,SamChi
s/Sam/Jack/g
1
JackChi,JackChi
如果要全局查找替换呢?

samchi@ubuntu:~/works/myworks/shell$ ed ./edtest 
42
g/Chi/s/Sam/Jack/g
1
JackChi,JackChi
2
SamLi, SamLi
3
JackChi, JackChi
以上指令是全局查找行中包含Chi并且将其中的Sam替换成Jack,注意前后两个g, 第一个g意思是查找整个文件,第二个g是匹配替换行内的所有词。

如果匹配的正则与要替换的正则一致,那么要替换的正则可以省略不写,比如:

samchi@ubuntu:~/works/myworks/shell$ ed ./edtest 
42
g/Chi/s//Wang/g
1
SamWang,SamWang
2
SamLi, SamLi
3
SamWang, SamWang
其他ed命令:

保存文件:

1,$w ./edtest2
46
将当前整个文件另存为。1,$表示从第一行到最后一行进行另存为。可以自由选择行数进行另存为。另外需要注意的是小写w为覆盖保存,大写W为追加保存。另外跟vim一样wq也是保存并退出的作用。如果要强行退出,那么使用Q指令。

显示指定行之间的内容:

samchi@ubuntu:~/works/myworks/shell$ ed ./edtest
42
1,$n
1	SamChi,SamChi
2	SamLi, SamLi
3	SamChi, SamChi

你可能感兴趣的:(玩Linux笔记 —— 《sed与awk》读书笔记 (1))