cat file
要求匹配到 black_r 0x0a 的段落,然后打印出 cmd: 后面的十六进制的值:
- awk -F"\n" -vRS='<![^>]*>' 'i~/black_r 0x0a/{for(n=0;n++<NF;){if($n~/,/){split($n,a,"\"|:");print a[3]}}}{i=RT}' file
[解析]
首先对段落的操作,一般处理 RS ,把它设置为我们的段落分割行,比如 ,把这一行段落分割标记处理为 RS,再把 FS 处理为换行,这样匹配到我们需要的段落 RT 内容,就内容进行处理,遍历每个字段,匹配到逗号的行,就再拆分它,最后打印出我们要的内容,效率是不是很低?代码又长。
- awk -F"[:\"]" '/black_r 0x0a/{i=1;next};i{if(/<!--/)exit;print $3}' file
[解析]
这个方法从效率上,要高很多,它没有循环,匹配到内容就退出。利用一个变量开关,这也是非常好的办法,当匹配到我们要的内容后就打开这个开关,然后开始打印我们需要的内容,直到匹配到下个段落的分割标志,我们就退出整个操作,不用逐一匹配到文件最后,在大文件下操作,这个方法效率很不错。
- sed -rn '1h;/!/!{1!H;$!b};1!{x;/black_r 0x0a/{s/(^[^\n]*\n)?[^:\n]*:([^"]*)[^\n]*/\2/g;p}}' file
[解析]
sed对段落的操作在我sed板块讲了很多了,基本可以沿用这种模式,只是最后的sed替换出我们要的内容需要多尝试。
阅读(7419) | 评论(0) | 转发(0) |