标题: [问题求助] 如何用sed提取每行第一对引号中的内容? [打印本页]
作者: 随风 时间: 2011-6-1 18:23 标题: 如何用sed提取每行第一对引号中的内容?
如何用sed提取每行第一对引号中的内容
"aaaaaaaaaaaaaaaaaaaaa"ddddddddddddddddddd"dddddddd"
"dkfdsfiadfafadfjadf"dfa>dfiadfdf"
dkfjiadfafja'f"difjdsifjadsfadsf"fidsjfdasfadsf"1111111"f
"dfijdifjdifjdifdsfidfij"
作者: 随风 时间: 2011-6-1 19:03
tmplinshi 的代码- sed -n "s/[^\"]*\"//;s/\".*//p" tem.txt
复制代码
作者: Batcher 时间: 2011-6-1 19:47
- sed "s/^[^\"]*\"\([^\"]*\)\".*/\1/" 1.txt
复制代码
作者: Batcher 时间: 2011-6-1 20:21
- gawk -F\" "{print $2}" 1.txt
复制代码
作者: 随风 时间: 2011-6-1 22:01
sed "s/^[^\"]*\"\([^\"]*\)\".*/\1/" 1.txt
上面是batcher的代码
我是这样理解
先把代码用空格隔开
/^ [^\"] * \" \([^\"]*\) \".*/ \1/
1、 ^号 代表行开头
2、 [^\"] 代表非引号
3、 * 代表 重复0或N次左边的非引号字符
4、 \" 到引号止
5、 \([^\"]*\) 这部分就应该是后面的 \1 了,也是非引号字符
6、 \".* 到引号止,后面.*代表任意字符
不理解的是为什么非要开头的1和2
我这样就不行 sed "s/.*\"\([^\"]*\)\".*/\1/" a.txt
.*\" 前面任意字符到引号止
\([^\"]*\) 和上面的一样
\".* 同上
望batcher能讲解下。。
作者: Batcher 时间: 2011-6-2 00:15
5# 随风
是正则表达式的贪婪性造成的,参考:
http://bbs.bathome.net/thread-12622-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |