Chinaunix

标题: 如何替换最后出现的某个字符 [打印本页]

作者: Jenny.Palmy    时间: 2008-12-19 09:27
标题: 如何替换最后出现的某个字符
例如有文件:
[ w '0 aa n ] [ t '0 ax] d
t [ ch '0 ae f ]
d [ jh '0 ah ] [ s t '0 ih] s
[ '0 ah v ]
[ dh '0 ] ax

我想每行最后出现的"]"替换成"#", 替换后的结果为:

[ w '0 aa n ] [ t '0 ax # d
t [ ch '0 ae f #
d [ jh '0 ah ] [ s t '0 ih # s
[ '0 ah v #
[ dh '0 # ax
请问应该用什么命令, 先谢谢了
作者: ly5066113    时间: 2008-12-19 09:34
sed 's/\(.*\)]/\1#/'
作者: 4Aiur    时间: 2008-12-19 09:34
sed 's/]\(.\{0,3\}$\)/#\1/'
作者: biglazybug    时间: 2008-12-19 09:39
标题: 回复 #2 ly5066113 的帖子
昨天的故技重施
作者: ly5066113    时间: 2008-12-19 09:42
标题: 回复 #4 biglazybug 的帖子
那我抄个黑哥的:
sed 's/]\([^]]*\)$/#\1/'
作者: blackold    时间: 2008-12-19 09:44
标题: 回复 #5 ly5066113 的帖子

作者: biglazybug    时间: 2008-12-19 09:48
标题: 回复 #5 ly5066113 的帖子
嘿嘿 我也尝试的写了 就是对于[^]]的时候我写一个[^\]] 老是不知道什么时候该转义[^] 都不用转吗
作者: biglazybug    时间: 2008-12-19 09:49
标题: 回复 #6 blackold 的帖子
黑哥牙都笑掉一颗
作者: ly5066113    时间: 2008-12-19 09:50
标题: 回复 #7 biglazybug 的帖子
特殊字符才需要转义
[ 是一个keyword,但]只是一个普通字符
作者: yezhulin1982    时间: 2008-12-19 09:51

作者: biglazybug    时间: 2008-12-19 09:54
标题: 回复 #9 ly5066113 的帖子
晕 左右对称的待遇还不同啊 这咋区分呢 为什么是这样的 就得死记吗
作者: Jenny.Palmy    时间: 2008-12-19 10:08
谢谢

如果我只想替换不是以"]"结尾的行呢,
例如:对文件
[ w '0 aa n ] [ t '0 ax] d
t [ ch '0 ae f ]
d [ jh '0 ah ] [ s t '0 ih] s
[ '0 ah v ]
[ dh '0 ] ax
只替换行1,3,5替换后的结果是
[ w '0 aa n ] [ t '0 ax # d
t [ ch '0 ae f ]
d [ jh '0 ah ] [ s t '0 ih # s
[ '0 ah v ]
[ dh '0 # ax
作者: ly5066113    时间: 2008-12-19 10:13
标题: 回复 #12 Jenny.Palmy 的帖子
sed -r 's/]([^]]+)$/#\1/'
作者: biglazybug    时间: 2008-12-19 10:17
sed -r '/]$/! s/(.*)]/\1#/' urfile
作者: Jenny.Palmy    时间: 2008-12-19 10:27
谢谢 大虾们的帮忙,

还有一个问题就是什么参数 可以让 SED命令对行尾的空格不敏感
作者: walkerxk    时间: 2008-12-19 10:33
$前面加个 *就行了,没有什么参数。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2