sed匹配一行中两个单词之间的内容
有下面的一行内容,我想要取出idc:www.networkbench.com1324519136406这一部分
var result={“citys”:[{“TS_CONNECT”:0.045,”TM_BASE”:”2013-01-04 15:26:08″,”BYTE_TOTAL”:67463,”TS_PACKAGE”:0.044,”TS_TOTAL”:3.111,”CLIENT_ISP”:”中国网通”,”TS_PAGE_BASE”:1.465,”RATE_DOWNLOAD”:22.722,”CLIENT_CITYNAME”:”北京市”,”CLIENT_IP”:”222.128.197.9″,”TS_DNS”:1.037,”RATE_DOWNLOAD_PAGE_BASE”:10.114,”TS_FIRST”:2.699,”TS_CONTENTS”:1.749,”DEST_IPver=20110329″,”TS_ELEMENT”:0.75,”BYTE_TOTAL”:6416,”HTTP_STAT_CODE”:200,”URL_IP”:”XXX.XX.XXX.XXX”,”ERROR_CODE”:0,”ELEMENT_TYPE”:”application/x-javascript”}],”DEST_ISP”:”361way”,”DEST_CITYNAME”:”杭州市”}],”TASK_URL”:”361way.com”,”TS_AVG”:3.111,”TASK_TYPE”:1,”TASK_NAME”:”idc:www.networkbench.com1357284366955″,”TASK_TRACERT”:false,”TASK_NSLOOKUP”:false};
可以通过以下语句实现:
1sed 's/.*"TASK_NAME":"(.*)","TASK_TRACERT".*/1/g' a.txt
因为上面的内容是一整行,用正则表达式之前一直匹配出错,都是匹配出同一行。后来想到php中的preg_match函数,发现用该函数能完美的实现两个单词之间的提取。不过细一想,PHP和sed之间的正则表达应该是相通的。于是就依葫芦画瓢照搬过来。果然在sed里发现也能实用。
其实该处的用法是sed ‘s///g’的变形,更改为sed ‘s/.*匹配字符串(.*).*匹配字符串/1/g’,其中.*代表匹配所有字符串(.*)和后面的1代表的是同一部分。意为找两个字符串之间的匹配部分。具体可以参看http://www.ibm.com/developerworks/cn/linux/shell/sed/sed-2/ 里的那些极好的带反斜杠的圆括号部分。有时为了便于对一次性完成多处文本的操作,可以定义几处(.*)区域,这时就要在后面通过1,2,3……来选择所要显示或修改的区域。
而关于正则表达式的详细介绍可以参看百度百科和维基百科中详细介绍:
http://baike.baidu.com/view/94238.htm
http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/sedbttwoword/651.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.