【发布时间】:2012-12-28 16:31:03
【问题描述】:
我想匹配模式,789。只使用一个 sed 命令。(没有与“-e”链接的多个命令)
规则是匹配第三个传真之后的号码。
echo "fax 123 def fax tel 456 fax 789 fax 976" | sed 's/xxxxxxx/'
【问题讨论】:
-
你知道你的分隔符是什么,所以你可以在没有正则表达式的情况下做到这一点。
我想匹配模式,789。只使用一个 sed 命令。(没有与“-e”链接的多个命令)
规则是匹配第三个传真之后的号码。
echo "fax 123 def fax tel 456 fax 789 fax 976" | sed 's/xxxxxxx/'
【问题讨论】:
使用awk 和fax 作为分隔符:
$ 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指定哪一行(field):
$ ... | sed -n '1s/^[^0-9]*//p'
123
$ ... | sed -n '2s/^[^0-9]*//p'
456
$ ... | sed -n '3s/^[^0-9]*//p'
789
【讨论】:
sed 解决方案,如果有帮助,请采纳。
我终于用了这样的命令:
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/'
【讨论】:
:|