替换{}中的x为;
 
原字符串
oxo{axbxc}oxo{dxexf}oxo
结果
oxo{a;b;c}oxo{d;e;f}oxo
 
 
awk '{for(i=1;i<=NF;i++){if($i=="{")j=1;if($i=="}")j=0;if($i=="x" && j)$i=";";print $i}}' test
分解,使用for循环记录字符串的每个字符,进行匹配,满足条件{,进入替换模式,再次进行匹配},满足条件循环结束;打印;打印使用printf会更好
 ############awk的思路更容易被理解,for循环逐个字符判断,匹配到 { 符号就做一个记号设置变量j=1,当j作为逻辑判断条件为真是把"x"变成";"符号。
awk -F "" '{for(i=1;i<=NF;i++)
{if($i=="{")j=1;
if($i=="}")j=0;
if(j && $i=="x")$i=";";
printf $i}
}
END{print ""}
 
下面是sed的替换,一直没看懂,摘自CU的大神   zooyo 的博客

sed ':1;s/\(.*{[^}]*\)x\(.*\)/\1;\2/;t1'
[解析]
这个问题的难点主要是在于同一行内替换,大家都知道awk和sed都是根据行来操作的,同一行内操作比较花力气一点,大家可以看看sedsed的执行结果:
PATT:oxo{axbxc}oxo{dxexf}oxo$
COMM::1
COMM:s/\(.*{[^}]*\)x\(.*\)/\1;\2/
PATT:oxo{axbxc}oxo{dxe;f}oxo$
COMM:t 1
COMM:s/\(.*{[^}]*\)x\(.*\)/\1;\2/
PATT:oxo{axbxc}oxo{d;e;f}oxo$
COMM:t 1
COMM:s/\(.*{[^}]*\)x\(.*\)/\1;\2/
PATT:oxo{axb;c}oxo{d;e;f}oxo$
COMM:t 1
COMM:s/\(.*{[^}]*\)x\(.*\)/\1;\2/
PATT:oxo{a;b;c}oxo{d;e;f}oxo$
COMM:t 1
COMM:s/\(.*{[^}]*\)x\(.*\)/\1;\2/
PATT:oxo{a;b;c}oxo{d;e;f}oxo$
COMM:t 1
PATT:oxo{a;b;c}oxo{d;e;f}oxo$
oxo{a;b;c}oxo{d;e;f}oxo
根据正则的贪婪性,是从后往前替换的,能替换成功的关键在于.*{[^}]*\)x\(.*\),首先要替换 { 之后的x,而且在之中不能有 } 字符,所以像{axbxc}oxo这样的 x 是不会被匹配到的,因为我们排除了 } 字符,替换成功后 t 跳转到lable标签处。

 

awk 指定{}内x的替换的更多相关文章

  1. CSS样式设置语法全解,样式优先级、值和单位、字体、文本、块级元素,行内元素,替换元素、非替换元素、display、float、position、table、li、光标、边距边框、轮廓、颜色背景

    全栈工程师开发手册 (作者:栾鹏) 一个demo学会css css选择器全解 css操作语法全解 CSS样式设置语法全解: 样式优先级 1. !important标记的样式 > 内联样式(sty ...

  2. php中按指定标识及长度替换字符的方法代码

    /** * 按指定标识及长度替换字符 * @param $str * @param int $start 开始的位数 * @param int $end 后面保留的位数 * @param string ...

  3. PHP操作字符串 截取指定长度字符 移除字符串两侧 左侧 右侧指定字符 或空白字符 替换字符

    trim() trim() 函数移除字符串两侧的空白字符或其他预定义字符. <?php $str = "Hello World!"; echo $str . "&l ...

  4. linux命令(51):set 指定行,直接替换并修改文件

    sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed  -i  '1,1s/ssd/cd/g' test_file 命令使用: sed - ...

  5. awk的内置函数

    常见awk内置数值函数

  6. linux命令:set 指定行,直接替换并修改文件

    sed 命令: 指定行,从第一行到第一行: 把该行的ssd,换成cd: -i 表示的是替换并直接修改文件: sed  -i  '1,1s/ssd/cd/g' test_file 命令使用: sed - ...

  7. AWK的内置变量

    ARGC: number (2) 在命令行提供的参数的个数,不包括命令awkARGIND: number (0) 当前文件中正在处理的 ARGV 数组的索引值. 文件的位置,从1开始计数.一个文件处在 ...

  8. python3.5学习笔记--利用字典对指定文本字符串进行替换

    事情缘起于同事整理excel,需要批量的对某一列的内容进行替换. 举例: 数据格式:以下为一列内容,每行都在一个单元格中,目的是将数字替换为制定的中文字符. 1,2,31 ,4,33 ,21,, 对于 ...

  9. awk指定[]为分隔符

    root@standby[16:38:35]$ root@standby[16:38:35]$ cat tmp.log qq [8.8.8.8] 6.6.6.6 [1502301436.016] &q ...

随机推荐

  1. chromedriver对应的支持的Chrome版本(更新至Chrome63)

    很多网友在配置chromedriver的时候会遇到很多麻烦,在网上找了很多资料觉得这个表格不错,就给大家分享出来,希望对大家配置chrome的时候有帮助: chromedriver版本 支持的Chro ...

  2. 从Unity中的Attribute到AOP(八)

    本文将讲一下在UnityEditor命名空间下的一些特性. CallBackOrder,这个Attribute是所有带callback index的Attribute的基类,由于官方也没有给出详细的说 ...

  3. org.springframework.data.redis.serializer.SerializationException: Cannot serialize;

    前言 本文中提到的解决方案,源码地址在:perfect-ssm,希望可以帮你解决问题. 问题描述 在Spring与Redis整合过程中,出现了如下报错: org.springframework.dat ...

  4. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  5. Django之cookie验证

    先不用太多的蚊子描述什么是cookie,先做一个小实验: 此时我们在谷歌浏览器(一个客户端)和IE浏览器(另一个用户)测试: 刺客我们发现在两台浏览器都可以访问,而且不用进入login验证就可以登录, ...

  6. Gym 100952H&&2015 HIAST Collegiate Programming Contest H. Special Palindrome【dp预处理+矩阵快速幂/打表解法】

    H. Special Palindrome time limit per test:1 second memory limit per test:64 megabytes input:standard ...

  7. hdu_2604Queuing(快速幂矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others)  ...

  8. Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式

    相较于社区其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的编程方式.我们并没有为Interceptor定义一个接口,正是因为不需要实现一个预定义的接口, ...

  9. Spring框架学习笔记(8)——AspectJ实现AOP

    使用代理对象实现AOP虽然可以满足需求,但是较为复杂,而Spring提供一种简单的实现AOP的方法AspectJ 同样的计算器的DEMO 首先配置applicationContext.xml < ...

  10. IE8兼容border-radius.

    我们知道,CSS3新增的很多简洁优美的属性,比如border-radius.box-shadow.border-image.gradients.RGBA...因为这些属性的出现,我们可以很方便的就写会 ...