提取每对中括号里的内容

1990阅读 0评论2013-12-03 yestreenstars
分类:LINUX

原帖:

处理前:
sss[1[2]3[xxx]45]sss

处理后:
结果1:
1[2
1[2]3[xxx
1[2]3[xxx]45
2
2]3[xxx
2]3[xxx]45
xxx
xxx]45
结果2:
2
xxx

处理规则:
第一种结果,提取每对中括号里的内容;第二种结果,提取嵌套的每对中括号里的内容。

第一种:

  1. awk -F '' '{while(/\[/){for(i=0;++i<=NF;){if(k){if($i~/\]/)print s;s=s""$i}if($i~/\[/)k=1}s=k="";sub(/\[/,"")}}'

第二种:

  1. sed -nr '/\[.*\[/!b;s/(.*)\[([^][]*)\](.*)/\2\n\1\3/;P;D'

  1. awk -F '' '{for(i=0;++i<=NF;){if($i~/\[/){s="";continue}if($i~/\]/&&s!~/\]/)print s;s=s""$i}}'

  1. grep -oP '(?<=\[)[^][]*(?=\])'

  1. perl -lne '1 while(/\[([^][]*)\](?{print $1})/g)'
上一篇:邻接矩阵
下一篇:showkey