首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
Google
首页 入门 Linux编程 系统管理 网络管理 Linux认证 Unix/BSD Linux数据库 Linux集群 Linux手册 Linux下载 Ubuntu 论坛 专题 RSS
您现在的位置: 中国IT实验室 >> Linux >> 其他Unix >> 正文

使用Unix命令行模式高效地进行文本编辑

当您对一组文件执行多行文本插入时,此项技术也非常有用。如果要插入大量的行,可以使用 here document,这是使用 << 和一个限制字符串以内联方式指定的文档,用于重定向其后直至到达限制字符串的所有输入(请参见参考资料):

$ for i in *.xml

> { ed -s $i << EOF

> //a \

> \

> johnnycomelately \

> 10 \

> 4 \

> \

> .

> wq

> EOF

> }

$

您可以在给定字符串之后插入一个文件:

$ (echo '/END OF PART I/r footnotes.txt'; echo 'wq') | ed file

删除行

使用 d 命令来删除文件中的行。与本文讨论的所有命令一样,您可以指定任何类型的有效地址,例如特定的行或行范围。在实践中,此单命令行程序最适合于与至少一个匹配的模式结合使用,例如删除从第一个匹配某模式的行到文件结尾的所有行:

$ ( echo '/FOOTNOTES/,$/d'; echo 'wq' ) | ed -s file

也可以按相反方向执行此操作,并删除从该文件的第一行到第一个匹配某模式的行的所有内容:

$ ( echo '1,/\.\.\./d'; echo 'wq' ) | ed -s file

删除尾随空格

通过使用 s 命令并替换一个空替换字符,您可以删除尾随空格:

$ cat -vet input.txt

This line has trailing blanks. $

This line does not.$

$ (echo ',s/ *$//'; echo 'wq') | ed -s input.txt

$ cat -vet input.txt

This line has trailing blanks.$

This line does not.$

$

使用 sed 进行编辑

本文讨论的最复杂和最强大的编辑工具是 sed(流编辑器)。它是一个文本编辑器,但是与诸如 ed 等文本编辑器不同,它编辑输入流并写到输出流。因此,它对于编辑命令输出或对于使用其他工具对文件进行预处理非常有用——然后您可以将该文本通过管道直接输出给 sed,以进行快速编辑。但是 sed 还可以操作文件,并且其脚本语言具有高级模式匹配功能,因此它是用于执行任何类型的快速文本编辑的理想选择——例如对一组文件进行快速搜索和替换。事实上,它是现有用于文本编辑的最流行命令行工具之一。

sed 接受包含任何数量命令的脚本,后面跟着可选的指定输入文件的选项;缺省情况下,它读取标准输入。某些版本的 sed 有一个 -i 选项,此选项指定应该编辑的输入文件。(如果没有此选项,则读取输入文件,而不对其执行写入。)如果您安装的版本支持此选项,则应该使用它——它允许您使用单个命令对任何指定的文件执行快速编辑操作。

sed -i script filespec

以下示例假设您的 sed 支持 -i 选项。否则,您必须使用 Shell 重定向将输出保存到新文件,并在另一个步骤将新文件重命名为旧文件,从而执行临时文件中转:

sed script file > newfile; mv newfile file

对于多个文件,您必须执行循环:

for i in *; { sed script $i > $i.new; mv $i.new $i; }

替换文件中的文本

您可以使用 s/searchstring/replacestring/ 构造将给定字符串替换为另一个字符串。若要替换某个文件中每行上的第一个 old 实例,可以使用以下命令:

$ sed -i 's/old/new/' file

若要替换每个实例,可以对该搜索追加 g 选项。此项技术对于修复输入错误或替换一个或一组文件中的重复单词、短语或其他内容非常理想。

$ sed -i 's/Esclipse/Eclipse/g' *.xml

您可以在输入表达式中将字符包括在方括号中,但是,如果您在替换文本中使用方括号,则会将它们视为普通字符:

$ cat file

This is the beginning.

This is the middle.

This is the end.

$ sed 's/[Tt]h/[Tt]h/g' file

[Tt]his is [Tt]he beginning.

[Tt]his is [Tt]he middle.

[Tt]his is [Tt]he end.

当要搜索或替换的短语包括斜杠字符时,应使用它来定义新的分隔符:

$ sed -i 's,/usr/local/websphere,/usr/websphere,' file

您还可以将包含某个模式的整个行替换为某些新文本:

$ sed -i 's/.*pattern.*/LINE DELETED/' file

上一页  [1] [2] [3] [4] [5] 下一页

【责编:Zenghui】
中国IT教育
相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·防范Linux病毒 打造没有病毒的乐土…
 ·Linux Shell编程实用指南…
 ·Linux日志分析与管理
 ·揭密Linux内存管理
 ·邮件服务Sendmail应用配置
 ·Linux 安全管理…
 ·Linux 下DNS服务器架设攻略…
 ·Linux 下的路由的配置与应用…
 ·专题:Apache实用手册
 ·全面剖析Linux文件系统
 今日更新
 认证培训
 频道精选
 Windows频道导航