变成: 【程序编程相关:2005-4-6 Linux新闻与流言 】
$ sed -e s/<.*>//g myfile.html这是要从文件除去 html 标记的第一个很好的 sed 脚本尝试,但是由于规则表达式的特有规则,它不会很好地工作.原因何在?当 sed 试图在行中匹配规则表达式时,它要在行中查找最长的匹配.在我的 【推荐阅读:GNOME Splash Contest】
this is what i meant.幸运的是,有一种简便方法来纠正该问题.我们不输入“< 字符后面跟有一些字符并以 > 字符结束”的规则表达式,而只需输入一个“< 字符后面跟有任意数量非 > 字符并以 > 字符结束”的规则表达式.这将与最短.而不是最长的可能性匹配.新命令如下: 【扩展信息:2005-4-4 Linux新闻与流言 】
meant.我们要的不是这个,而是:
$ sed -e s/<[^>]*>//g myfile.html在上例中,[^>] 指定“非 >”字符,其后的 * 完成该表达式以表示“零或多个非 > 字符”.对几个 html 文件测试该命令,将它们管道输出到 "more",然后仔细查看其结果.
更多字符匹配
[ ] 规则表达式语法还有一些附加选项.要指定字符范围,只要字符不在第一个或最后一个位置,就可以使用 -,如下所示: [a-x]*这将匹配零或多个全部为 a.b.c...v.w.x 的字符.另外,可以使用 [:space:] 字符类来匹配空格.以下是可用字符类的相当完整的列表:
字符类描述[:alnum:]字母数字 [a-z a-z 0-9][:alpha:]字母 [a-z a-z][:blank:]空格或制表键[:cntrl:]任何控制字符[:digit:]数字 [0-9][:graph:]任何可视字符(无空格)[:lower:]小写 [a-z][:print:]非控制字符[:punct:]标点字符[:space:]空格[:upper:]大写 [a-z][:xdigit:]十六进制数字 [0-9 a-f a-f]尽可能使用字符类是很有利的,因为它们可以更好地适应非英语 locale(包括某些必需的重音字符等等).
高级替换功能
我们已经看到如何执行简单甚至有些复杂的直接替换,但是 sed 还可以做更多的事.... 下一页