sed如何获得一个最短的匹配?

sh/bash/dash/ksh/zsh等Shell脚本
回复
xxxxusky
帖子: 12
注册时间: 2006-09-24 19:20
送出感谢: 0
接收感谢: 0

sed如何获得一个最短的匹配?

#1

帖子 xxxxusky » 2006-12-23 12:58

如:aaaa:bbbb:ccccc
要替换aaaa:部分
如果用sed -e 's/.*://'显然会将aaaa:bbbb:替换
如何才能获得最短的匹配呢?
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

#2

帖子 aBiNg » 2006-12-23 20:02

代码: 全选

sed -e 's/[a-z]*://'
xxxxusky
帖子: 12
注册时间: 2006-09-24 19:20
送出感谢: 0
接收感谢: 0

#3

帖子 xxxxusky » 2006-12-23 21:36

如果前面有特殊字符呢?
不可能在[]里面把他们全写出来吧
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京
送出感谢: 0
接收感谢: 2 次

#4

帖子 aBiNg » 2006-12-24 10:18

regexp的贪婪性是由来已久了,试试全局匹配:

代码: 全选

echo "aaa:bbb:ccc" | sed -e 's/\(.*\):\(.*\):\(.*\)/\2:\3/'
来阻止它的贪婪性。

注:如果文本毫无规律可言,sed替换也没有办法处理了。
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
送出感谢: 0
接收感谢: 1 次
联系:

#5

帖子 laborer » 2006-12-25 12:00

代码: 全选

echo aaaa:bbbb:ccccc | sed 's/[^:]*://'
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
xxxxusky
帖子: 12
注册时间: 2006-09-24 19:20
送出感谢: 0
接收感谢: 0

#6

帖子 xxxxusky » 2006-12-26 8:49

laborer 写了:

代码: 全选

echo aaaa:bbbb:ccccc | sed 's/[^:]*://'

that is good
回复

回到 “Shell脚本”