Chinaunix首页 | 论坛 | 博客
  • 博客访问: 364158
  • 博文数量: 102
  • 博客积分: 2070
  • 博客等级: 大尉
  • 技术积分: 1019
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 11:07
文章存档

2011年(1)

2010年(34)

2009年(37)

2008年(30)

我的朋友

分类: LINUX

2008-07-14 11:33:24


 


[精华] 使用 gedit 格式化文章


作者:  发表于:2008-05-09 16:11:33
【】 【】 【】【】

在 windows 下,我们经常可以在各种文本编辑工具中将某些常用的命令保存起来,进行一系列的自动脚本,来帮助我们执行批处理命令,在linux  下,我们也可以使用某些工具来高效,轻松地来进行这些工作,本文以 gnome 下的自带图形文本编辑器 gedit来说明一个简单的例子。

OK,让我们开始:

1. 打开 gedit ,并找到菜单 “编辑” -> “首选项”,在 “插件” 选项,选择 “外部工具”(gedit默认没有加载此插件,我们需要手动加载它),这样,我们就可以在 gedit 中使用各种外部命令和 shell 脚本。

[url=http://aolinux.simnovel.com/uploaded_images/file-772616.png]

2.在“工具”菜单,我们可以看到“外部工具”,打开它,在此对话框我们可以进行各种脚本和工具的设定,当然 gedit已经为我们提供了几个诸 如“构建”,“删除尾部空格”等小的脚本,我们也可通过 “新建”按钮自定义脚本,现在我们新建一个:点击“新建”,工具名和描述叫做 “格式化文本”, 将鼠标键入“快捷键”框,并同时按下 “ALT+2”键,“输入” 选当前文档,“输出”选替换当前文档,“适用范围”选全部文档,因为我们需要的是将复 制过来的文本进行一下格式的替换,例如段落间空行和每自然段前置两个全角空格之类的文章格式。

[url=http://aolinux.simnovel.com/uploaded_images/file-772694.png]

3. 现在我们开始编写处理命令,在“命令”中键入:

#!/bin/sh
sed 's/ //g;s/ //g;s/^  $//g;s/^/  /g';

我们来看一下这两行代码的含义和他们能完成的工作。

第一行:#!/bin/sh,这是一个脚本表示行,/bin/sh 向系统声明了这个脚步是一个shell脚本,当然 linux 系统中有很多类型的脚本,perl,c,php,python,但是我们现在只需要shell脚本。

第二行:sed 's///g;s/ //g;s/^  $//g;s/^/  /g';,这就看起来比较可怕了,不要怕,经过我的解释,你会对 此一清二楚,首先 “sed”是一个shell命令,比方说ls,mkdir,copy等等都是,“sed” 的用途就是处理各种文本,拆分,拼合,查 找,替换等待,具体可以google 一下 sed,我们现在用sed仅仅完成一个简单的任务:“替换”,sed的替换是这样的一种命令格式:

sed 's/替换前的内容/替换后的内容/g(g代表全文检索,不带g代表当前行检索)'

“;”分号代表了分割两个命令段,即“第一类替换;第二类替换;...”,够清楚了吗?好了,我们再回头看一下我们的代码,很简单,我们进行当前 文档的全文替换,将“半角空格和全角空格”替换成“”,就是清除这两项,将文章头尾(“^”表示开头,“$”表示结尾)的全角空格全部去除,重新将每段落 开头加上两个全角空格。

4. 我们完成了自己的“格式化文本”的脚本编写工作,现在来试试。随便复制一段文章到 gedit,按下“ALT+2”组合键,Oh!文章安装我们的既定格式重新排版了,看上去很整齐!

[url=http://aolinux.simnovel.com/uploaded_images/file-700485.png]

虽然这个小工具还很粗糙,还不能处理很多高级的替换命令,但这只是一个开头,聪明的你应该可以举一反三,自己定义更为强大的处理脚本了。

原文地址:
[url=]

[ 本帖最后由 jsonic 于 2008-5-9 11:52 编辑 ]



  回复于:2008-05-09 14:51:30

引用:
第二行:sed 's///g;s/ //g;s/^  $//g;s/^/  /g';,这就看起来比较可怕了,不要怕,经过我的解释,你会对 此一清二楚,首先 “sed”是一个shell命令,比方说ls,mkdir,copy等等都是,“sed” 的用途就是处理各种文本,拆分,拼合,查 找,替换等待,具体可以google 一下 sed,我们现在用sed仅仅完成一个简单的任务:“替换”,sed的替换是这样的一种命令格式:

sed 's/替换前的内容/替换后的内容/g(g代表全文检索,不带g代表当前行检索)'


这里对sed 的s命令参数g 的解释有问题,g应该是对partern buffer中的所有匹配执行s命令,没有g参数,则表示只对第一个匹配执行s命令.sed是一个行驱动的程序,不存在全文检索的概念.
举例如下:
原文本  123a456a789a
sed 's/a/A/' ==> 123A456a789a
sed 's/a/A/g' ==> 123A456A789A


  回复于:2008-05-09 15:39:42

这个g的解释是IBM给出的,具体可以见此文:
http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-2/

原文:
“在最后一个斜杠之后附加的 'g' 选项告诉 sed 执行全局替换。”


  回复于:2008-05-09 16:11:33

引用:原帖由 jsonic 于 2008-5-9 15:39 发表 [url=]
这个g的解释是IBM给出的,具体可以见此文:
http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-2/

原文:
“在最后一个斜杠之后附加的 'g' 选项告诉 sed 执行全局替换。” 


这个全局也是针对行而言的。
引用:
也就是说,要替换每行中的 所有出现






原文链接:
转载请注明作者名及原文出处





Copyright © 2001-2006 ChinaUnix.net   All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号

阅读(829) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:我浮动的心情

给主人留下些什么吧!~~