LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1165|回复: 3

问一个sed字符匹配的问题。

[复制链接]
发表于 2010-3-17 22:56:10 | 显示全部楼层 |阅读模式
有一个文本如:
wager[T]'weid=3[M]n.赌注
wail[T]weil[M]vi.恸哭
waive[T]weiv[M]vt.不坚持
wan[T]w6n, w1:n[M]a.苍白的
wane[T]wein[M]vi.衰退
vanish[T]'v5ni7[M]vi.消失
wanton[T]'w6nt3n, 'w1:n-[M]a.胡乱的

我想把每一行由 [字符 开始 到 行尾的所有字符删掉得到如下结果:
wager
wail
waive
wan
wane
vanish
wanton

我用sed命令  sed 's/[[].*//p' /home/onelay/word   得到了正确的结果。


我的问题是*匹配任意多字符           .匹配任意单字符
为什么用命令   sed 's/[[]*//p' /home/onelay/word          得不到正确结果,一定要在*前面加.单字符匹配才行

理解不了,希望大家指教一下,sed新手望大家见谅。
发表于 2010-3-17 23:15:23 | 显示全部楼层
[[]* 匹配 任意数量的 [
[[].* 匹配以 [ 起始的任意数量(*)的任意字符(.)

其实应该是这样写:
sed 's/\[.*//'
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-3-18 00:06:05 | 显示全部楼层
谢谢。
收获很大。

如果要删除 文本中 包含的中文字符 sed能做到吗?
回复 支持 反对

使用道具 举报

发表于 2010-3-18 02:40:26 | 显示全部楼层
当然能,但是中文有编码问题(gb2312, utf8 ...)
所以只能用列出所有非中文字符的方法完成

大致类似于
sed 's/[这里列出所有非中文集合]/\1/g'

这样也可,不知哪个速度快
sed 's/[这里列出所有非中文集合]*/\1/g'
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表