分页: 1 / 1

为什么max count会失效的呢?

发表于 : 2013-09-16 18:20
YeLee
[bash]
#!/bin/bash
id3="$(audtool current-song)"
artist=$(echo "$id3" |awk -F- '{printf $1}')
title=$(echo "$id3" |awk -F- '{printf $3}')
lrcid=$(wget -q "http://box.zhangmen.baidu.com/x?op=12&c ... le=${title# }\$\$${artist% }\$\$\$\$" -O - |grep -m 1 -Po '(?<=<lrcid>)\d+?(?=</lrcid>)' )

[ -z "${lrcid}" ] || [ $lrcid -eq 0 ] && echo "No lrc found!" && exit 1
wget -q "http://box.zhangmen.baidu.com/bdlrc/$((${lrcid} / 100))/${lrcid}.lrc" -O - |iconv -f gbk
[/bash]
本来想用grep -m 1 -Po '(?<=<lrcid>)\d+?(?=</lrcid>)' 获取第一个lrcid标签里面的几个数字的,只是不知为何,我这边的grep用了max count之后,并没有如计划中那样得到第一个匹配结果后停止匹配,而是一直匹配到这一行的结尾。
而用sed 's=\(<\/\w\+>\)=\1\n=g' log |grep -m 1 -Po '(?<=<lrcid>)\d+?(?=</lrcid>)'处理之后,却可以只输出第一个匹配到的结果。
不知能否单用一个grep实现呢?求高手指导一下。

Re: 为什么max count会失效的呢?

发表于 : 2013-09-18 4:24
needle
grep只对行操作,--max-count指匹配的最大行数,wget输出的结果变成一行了。

个人认为,不可能~
匹配成功一次,就会继续第二次~,无法阻止。