Linux命令sed是“stream editor”的缩写,也就是流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
使用Sed进行文本文件更改的示例
假设您有一个名为558idc.com.txt的文件,其中包含以下行:
1, linux idc, Title 639, Price $9.30
2, 558idc ninhao, Title 761, Price $5.90
3, linuxmi nihao, Title 880, Price $9.30
4, linuxmi com, Title 198, Price $1.30
5, Johnny Cash, Title 582, Price $6.50
6, Elvis Presley, Title 370, Price $9.30
7, John Lennon, Title 571, Price $8.90
8, Michael Jackson, Title 673, Price $7.50
9, 558idc com, Title 585, Price $1.80
您想要将所有价格变动9.30美元更改为8.88美元。 为此,您可以通过以下方式使用sed命令:
558idc@Ubuntu:~/558idc.com$ sed 's/9.30/8.88/' 558idc.com.txt > 558idc.txt
此代码进行更改并将修改后的文件保存为558idc.txt。 生成的新文件包含:
558idc@ubuntu:~/558idc.com$ cat 558idc.txt
1, linux idc, Title 639, Price $8.88
2, 558idc ninhao, Title 761, Price $5.90
3, linuxmi nihao, Title 880, Price $8.88
4, linuxmi com, Title 198, Price $1.30
5, Johnny Cash, Title 582, Price $6.50
6, Elvis Presley, Title 370, Price $8.88
7, John Lennon, Title 571, Price $8.90
8, Michael Jackson, Title 673, Price $7.50
9, 558idc com, Title 585, Price $1.80
如果你想用“558idc”替换所有出现的“linuxmi”,你也可以用这种方式使用sed命令:
558idc@ubuntu:~/558idc.com$ sed 's/linuxmi/558idc/' 558idc.com.txt > 558idc.txt
生成的修改文件558idc.txt将包含以下文本:
558idc@ubuntu:~/558idc.com$ cat 558idc.txt
1, linux idc, Title 639, Price $9.30
2, 558idc ninhao, Title 761, Price $5.90
3, 558idc nihao, Title 880, Price $9.30
4, 558idc com, Title 198, Price $1.30
5, Johnny Cash, Title 582, Price $6.50
6, Elvis Presley, Title 370, Price $9.30
7, John Lennon, Title 571, Price $8.90
8, Michael Jackson, Title 673, Price $7.50
9, 558idc com, Title 585, Price $1.80
使用Sed命令过滤
Sed也经常用于过滤文件中的行。 例如,如果您只想查看包含“558idc”的行,则可以使用以下sed命令:
558idc@ubuntu:~/558idc.com$ sed -n '/558idc/p' 558idc.com.txt > 558idc.txt
新的558idc.txt文件将包含以下行:
558idc@ubuntu:~/558idc.com$ cat 558idc.txt
2, 558idc ninhao, Title 761, Price $5.90
9, 558idc com, Title 585, Price $1.80
更多Linux命令相关信息见Linux命令大全 专题页面 https://www.558idc.com/topicnews.aspx?tid=16