Board logo

标题: [问题求助] sed 如何提取关键字后面的第一对引号中的内容 [打印本页]

作者: 随风    时间: 2011-6-2 13:42     标题: sed 如何提取关键字后面的第一对引号中的内容

本帖最后由 随风 于 2011-6-2 13:48 编辑

xxx"abcx"xabc"1"xx"xxx"abc"2"abc"3abc3"xx"x
上行中abc"引号 为关键字,要提取他后面第一对引号中的内容,其中xxx为未知数

需提取的结果为  1 2 3abc3
作者: plp626    时间: 2011-6-2 19:38

菜鸟路过。
期待解答。。
作者: Batcher    时间: 2011-6-2 20:01

  1. sed  "s/\(abc\"[0-9a-z]*\"\)/\n\1\n/g" 1.txt | sed -n "/abc\"[0-9a-z]*\"/ s/.*\"\(.*\)\"/\1/p" | sed ":a;N;$!ba;s/\n/ /g"
复制代码
晚上到家再想一个简单的
作者: 随风    时间: 2011-6-2 20:30

再补充一点 列子中的 数字,字母有可能是汉字,符号。
作者: tmplinshi    时间: 2011-6-2 20:35

  1. sed -n "s/abc\x22/\n/g; s/\x22[^\n]*//g; s/[^\n]*//; p"
复制代码

作者: batman    时间: 2011-6-2 21:23

本帖最后由 batman 于 2011-6-2 21:30 编辑

还是vbs正则方便:
  1. Dim vbstr, rgstr
  2. vbstr = "xxx""abcx""xabc""1""xx""xxx""abc""2""abc""3abc3""xx""x"
  3. Set regex = New RegExp
  4. regex.Global = True
  5. regex.IgnoreCase = True
  6. regex.Pattern = ".*?abc\x22(.*?)\x22"
  7. For Each match In regex.Execute(vbstr)
  8.   rgstr = rgstr & match.Submatches(0)
  9. next
  10. Set regex = Nothing
  11. MsgBox rgstr
复制代码
ps:这个正则可以想取哪段取哪段的,很方便。。。
作者: 随风    时间: 2011-6-2 21:35

5# tmplinshi

strxxx"abcx"xabc"1"xFFF"A"xxFFFx"xxx"abc"2"xxFFF"B"xxabc"3abc3"xx"x"FFF"C"xxxFFF
太美丽了,很巧妙的方法,学习了.
增加难度
上面行 FFF" 为新的关键字
要求显示如下
1 A
2 B
3abc3 C
作者: batman    时间: 2011-6-2 21:48

还是vbs:
  1. Dim vbstr, rgstr
  2. vbstr = "strxxx""abcx""xabc""1""xFFF""A""xxFFFx""xxx""abc""2""xxFFF""B""xxabc""3abc3""xx""x""FFF""C""xxxFFF"
  3. Set regex = New RegExp
  4. regex.Global = True
  5. regex.IgnoreCase = True
  6. regex.Pattern = ".*?abc\x22(.*?)\x22.*?fff\x22(.*?)\x22"
  7. For Each match In regex.Execute(vbstr)
  8.   rgstr = rgstr & match.Submatches(0) & Chr(9) & match.Submatches(1) & vbCrLf
  9. next
  10. Set regex = Nothing
  11. MsgBox rgstr
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2