找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 19331|回复: 5

[问题求助] 如何用sed提取每行第一对引号中的内容?

[复制链接]
发表于 2011-6-1 18:23:30 | 显示全部楼层 |阅读模式
如何用sed提取每行第一对引号中的内容

"aaaaaaaaaaaaaaaaaaaaa"ddddddddddddddddddd"dddddddd"
"dkfdsfiadfafadfjadf"dfa>dfiadfdf"
dkfjiadfafja'f"difjdsifjadsfadsf"fidsjfdasfadsf"1111111"f
"dfijdifjdifjdifdsfidfij"
 楼主| 发表于 2011-6-1 19:03:08 | 显示全部楼层
tmplinshi 的代码
  1. sed -n "s/[^"]*"//;s/".*//p" tem.txt
复制代码
发表于 2011-6-1 19:47:16 | 显示全部楼层
  1. sed "s/^[^"]*"\([^"]*\)".*/\1/" 1.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
tmplinshi + 1 学习

查看全部评分

发表于 2011-6-1 20:21:17 | 显示全部楼层
  1. gawk -F" "{print $2}" 1.txt
复制代码
 楼主| 发表于 2011-6-1 22:01:04 | 显示全部楼层
sed "s/^[^\"]*\"\([^\"]*\)\".*/\1/" 1.txt
上面是batcher的代码
我是这样理解
先把代码用空格隔开
/^  [^\"]  *  \"  \([^\"]*\)  \".*/ \1/
1、 ^号 代表行开头
2、 [^\"] 代表非引号
3、 * 代表 重复0或N次左边的非引号字符
4、 \" 到引号止
5、 \([^\"]*\) 这部分就应该是后面的 \1 了,也是非引号字符
6、 \".* 到引号止,后面.*代表任意字符

不理解的是为什么非要开头的1和2
我这样就不行 sed "s/.*\"\([^\"]*\)\".*/\1/" a.txt
.*\" 前面任意字符到引号止
\([^\"]*\) 和上面的一样
\".* 同上

望batcher能讲解下。。
发表于 2011-6-2 00:15:27 | 显示全部楼层
5# 随风


是正则表达式的贪婪性造成的,参考:
http://bbs.bathome.net/thread-12622-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:10 , Processed in 0.020203 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表