Board logo

标题: [问题求助] gawk如何提取指定字符之间的字符串 [打印本页]

作者: FOR    时间: 2011-11-1 21:02     标题: gawk如何提取指定字符之间的字符串

gawk如何提取指定字符之间的字符串
如何提取ab和cd之间的字符串
a.txt
abdifdfajfidf
afieeacdefe
efabifadficdiefjeie
abidfeiecd
abdifieeidcdiefie
faifejeia
如上,蓝色字体为需要提取的字符串
作者: awk    时间: 2011-11-1 21:56

  1. sed -r "/ab.*cd/!d; s/.*ab(.*)cd.*/\1/" a.txt
复制代码

作者: FOR    时间: 2011-11-1 22:51

本帖最后由 FOR 于 2011-11-1 22:54 编辑

回复 2# awk


题意没有说清楚,这个 sed 有贪婪性
比如
ab1234cd0000cd
我需要的是ab至第一个cd之间的内容即1234而不是1234cd0000
还有如果一行中有多个ab。。。cd 。。。能把内容都提取出来吗?
比如 ab1234cd000ab2222cd99999ab8888
提取
1234
2222
后面 ab 后面的8888不要,因为没有cd结尾。
作者: sxw    时间: 2011-11-1 23:21

用sed正则很好实现啊
作者: awk    时间: 2011-11-1 23:35

回复 3# FOR
  1. sed "s/cd/@\n/g" a.txt | sed "/ab.*@$/!d; s/.*ab//; s/@$//"
复制代码
根据实际情况把@设置成文件中不会出现的字符
作者: dn833    时间: 2011-11-15 17:03

awk -F ab '/ab.*cd/{gsub(/cd.*/,"");print $NF}'




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