Categories
软件 [15]
Archives
February 2008 |
关于sed的又一问题guocongbin | 12/30 2007, 22:08
这个问题的描述大概如下 一个文本里面的一些行中存在一些注释,注释的格式和C的类似(/* .. */)不过不用考虑注释跨行的case。而且一行中可能存在多个注释。现在的需求是将这行中所有的注释移动的行尾。 其实这个问题并不复杂。 对于这类问题,关键是要使用sed的branch功能,也就是创建一个循环。我给一个大概的思路 首先要将行尾做一个标记,这样我们就只是移动该标记之前的所匹配的模式了;然后定义个标签,供循环使用;然后对行尾标记前的字符串进行处理,找到符合模式的部分,并移动到行尾之后;使用t命令,如果上面的替换操作成功,就跳转到定义的标记哪里,重新开始一个循环;最后将行尾标记替换成普通分隔符。 下面举个简单的例子,为了简化问题,这里我们将一行中出现的所有的a字符都移动到行尾 命令如下
$echo a b c d a b a c |sed 's,$,^A,;:a;s,([^a]*)(a)([^a]*^A),132,;ta;s,^A, ,'
Comments0 Responses to “关于sed的又一问题”Add comment |