如何匹配这样的重复模式?

时间:2012-12-28 16:31:04

标签: regex linux unix grep

我想匹配模式,789。仅使用一个sed命令。(没有多个命令与“-e”链接)

规则是匹配第三份传真后的号码。

echo "fax 123 def fax tel 456 fax 789 fax 976" | sed 's/xxxxxxx/'

2 个答案:

答案 0 :(得分:2)

awkfax一起用作分隔符:

$ echo "fax 123 def fax tel 456 fax 789 fax ghi" | awk -F'fax ' '{print $4}'
789

使用sed

$ echo "fax 123 def fax tel 456 fax 789 fax ghi" | sed 's/.*fax \([0-9]\+\).*/\1/'
789

修改: sed是基于行的,所以如何使用grep首先拆分字段:

$ echo "fax 123 def fax tel 456 fax 789 fax 976" | egrep -o 'fax (tel )?[0-9]+'
fax 123
fax tel 456
fax 789
fax 976

然后使用sed指定(字段)

 $ ... | sed -n '1s/^[^0-9]*//p'
 123

 $ ... | sed -n '2s/^[^0-9]*//p'
 456

 $ ... | sed -n '3s/^[^0-9]*//p'
 789

答案 1 :(得分:0)

我终于使用了一个命令:

echo "  fax 123 def fax tel 456 fax 789 fax 012" |  
sed -e 's/^\s*fax\s*[0-9a-z]*\s*[a-z0-9]*\s*fax\s*[0-9a-z]*\s*[0-9a-z]*\s*fax\s*\([0-9]*\).*$/\1/'