替换{}中的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. 使用xUnit为.net core程序进行单元测试(中)

    第一部分: http://www.cnblogs.com/cgzl/p/8283610.html 下面有一点点内容是重叠的.... String Assert 测试string是否相等: [Fact] ...

  2. Pandas系列之入门篇

    Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...

  3. Django-- 多数据库联用

    django项目中使用多个数据库的方法, 多个数据库的联用 以及多数据库时数据导入导出的方法. 直接给出一种简单的方法吧,想了解更多的到官方教程,点击此处 给每个app都可以单独的设置一个数据库 se ...

  4. k-vim常见快捷键

    前段时间看到wklken分享的k-vim配置,试用了下真的爽到飞起. 不过唯一不爽的是有一些快捷键一直记不住,现在整理些常用的快捷键,以备查阅. F2 set nu/nonu,行号开关,用于鼠标复制代 ...

  5. JavaSE(十一)之异常处理详解

    一.异常概述 在我们日常生活中,有时会出现各种各样的异常,例如:职工小王开车去上班,在正常情况下,小王会准时到达单位.但是天有不测风云,在小王去上班时,可能会遇到一些异常情况,比如小王的车子出了故障, ...

  6. Codefoces 723A The New Year: Meeting Friends

    A. The New Year: Meeting Friends time limit per test:1 second memory limit per test:256 megabytes in ...

  7. 51 Nod 1008 N的阶乘 mod P【Java大数乱搞】

    1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %)   例如:n ...

  8. Jungle Roads(kruskar)

    Jungle Roads 题目链接;http://poj.org/problem?id=1251 Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

  9. msf

    show exploit show payload msf使用数据库加快搜索,不然每次都等半天 service postgresql startmsfdb reinitmsf > db_rebu ...

  10. Unity Instantiate各函数执行顺序

    GameObject go = Instantiate(aaa) ;        go.GetComponent<NewBehaviourScript>().Init(); Instan ...