为什么max count会失效的呢?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
YeLee
论坛版主
帖子: 26406
注册时间: 2008-08-13 8:48
系统: Fundu i64
来自: 东海硇州,一双管钥。
联系:

为什么max count会失效的呢?

#1

帖子 YeLee » 2013-09-16 18:20

[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实现呢?求高手指导一下。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34

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

#2

帖子 needle » 2013-09-18 4:24

grep只对行操作,--max-count指匹配的最大行数,wget输出的结果变成一行了。

个人认为,不可能~
匹配成功一次,就会继续第二次~,无法阻止。
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
回复