欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/44020599

引言

我在一个项目中需要发布版本,两个客户的需求基本相同,只有是在一个fm34(消回音)模块上一个有该功能,另外一个没有。那么就存在在发版本的时候根据需要打开和关闭关于fm34相关的代码。

其中的一个就是是否需要inmod一个ko文件,我的处理是:

  • 在脚本中有inmod该ko的一行代码,但是默认是被注释掉的
  • 在给需要该功能的客户发布版本时,通过sed将改行的注释去掉(shell中的#字符)
  • 编译出带有fm34功能的版本
  • 发布版本完成后,记得将该行在注释回去(有可能在给另外一个客户发版本)

在这里,我就需要如何在脚本中自动完成上面的操作,先给出最终的脚本代码:

#!/bin/bash# enable snd-soc-wmt-fm34
sed -i '/snd-soc-wmt-fm34/s/^#//' fs_patch/load_drivers.shsource release_Common.sh# disable snd-soc-wmt-fm34 back
sed -i '/snd-soc-wmt-fm34/s/^/#&/' fs_patch/load_drivers.sh

上面的代码主要是包括一下几个步骤:

  1. 删除行首的#字符,打开注释部分代码
  2. 编译版本
  3. 将指定行代码再次注释起来

sed行首删除一个字符

sed -i '/snd-soc-wmt-fm34/s/^#//' fs_patch/load_drivers.sh

-i表示在原始文件上进行修改。

       -i[SUFFIX], --in-place[=SUFFIX]
              edit files in place (makes backup if extension supplied)

s/^#//表示将字符串开头的#字符替换为空(即去除行首的#字符)

       s/regexp/replacement/
              Attempt  to  match  regexp  against  the  pattern  space.  If successful, replace that portion matched with replacement.  The replacement may contain the special character & to refer to that portion of  the  pattern space  which  matched,  and  the  special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.

其中s/regexp/replacement/命令支持address ranges,在该脚本中使用的是正则表达式匹配确定address ranges的方式:

/snd-soc-wmt-fm34/表示匹配含有snd-soc-wmt-fm34字符串的行

       /regexp/
              Match lines matching the regular expression regexp.

除了使用/regexp/的方式匹配特定行,sed还支持直接指定行号的方式进行操作,则上面的脚本也可以使用采用下面的方式完成:

sed -i '49s/^#//' fs_patch/load_drivers.sh

       number Match only the specified line number.

注意,上面的数字前后都没有任何的附加字符。

sed行首添加一个字符

sed -i '/snd-soc-wmt-fm34/s/^/#&/' fs_patch/load_drivers.sh

注意,这里和上面的删除操作唯一的不同就在于s/^/#&/部分。其中,^字符匹配行首,#字符是一般字符表示添加该字符,&字符是我们这里需要重点关心的。在上面的关于s/regexp/replacement/命令描述时有以下字段:

The replacement may contain the special character & to refer to that portion of  the  pattern space  which  matched,  and  the  special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.

这里提到了两种特殊字符:

&:refer to that portion of  the  pattern space  which  matched,即表示前面的正则表达式匹配出来的部分,而在这里指的就是行首位置。实际上,在此处我们完全可以不要&字符,也是可以完成任务的。

\1...\9:refer to the corresponding matching sub-expressions in the regexp,主要用于多匹配时(如匹配行中的特定位置)分别表示前面的正则表达式匹配出来的部分,这里的多匹配需要使用()来进行分割,如上面的代码可以分别使用下面两种方式进行实现:

sed -i '/snd-soc-wmt-fm34/s/\(^\)/\1#/' fs_patch/load_drivers.sh
sed -i '/snd-soc-wmt-fm34/s/\(^\)\(.*\)/#\2/' fs_patch/load_drivers.sh

具体内容请参考正则表达式相关知识。

其它

本例中是根据工作需要在行首添加和删除字符,如果是在行尾进行操作,则需要使用&通配符;而如果需要在行中的其它位置进行操作,则可能就需要使用到多匹配的方式。

sed在指定行上删除和添加字符相关推荐

  1. linux 行首加特定字符_Linux:用sed命令在文本的行尾或行首添加字符

    用sed命令在行首或行尾添加字符的命令有以下幾種: 假設處理的文本為test.file 在每行的頭添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' ...

  2. sed搜索某行在行末追加_Linux的Shell--Sed操作(指定行增加删除内容)

    #-----------在某行(指具体行号)前或后加一行内容----------- linux vi命令删除一行 #第4行末尾追加一行,内容为test sed -i 'N;4atest' test.t ...

  3. Linux的Shell--Sed操作(指定行增加删除内容)

    一.在某行(指具体行号)前或后加一行内容 #第4行末尾追加一行,内容为test sed -i 'N;4atest' test.txt #第4行行首追加一行,内容为test sed -i 'N;4ite ...

  4. linux shell sed命令 在文本每行 行尾 或 行首 添加字符

    用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 在每行的头添加字符,比如"HEAD",命令如下: sed "s/^/HEAD&am ...

  5. sed搜索某行在行末追加_linux shell 用sed命令在文本的行尾或行首添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  6. linux shell 用sed命令在文本的行尾或行首添加字符

    from:http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了s ...

  7. linux 行首加特定字符_linux shell 用sed命令在文本的行尾或行首添加字符

    昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.f ...

  8. sed在指定行插入新行

    sed命令常用到的两个选项: -i : 直接在文件上编辑 (edit files in place) -e[默认选项]:只在命令行输出,而文件不改变 (add the script to the co ...

  9. linux 命令sed命令指定行或匹配行插入行

    sed -i "231s:.*:hello:g" file #将第231行的所有字符替换为hellosed -i '$d' file #将文件file的最后一行删除sed -i & ...

最新文章

  1. 用MATLAB读取MORSE、BPSK、QPSK信号的波形和频谱
  2. fiddler 之 返回数据乱码解决方法
  3. smooth_L1_loss_layer.cpp:28] Check failed: bottom[0]-channels() == bottom[1]-channels() (12 vs. 84
  4. NSString、NSMutableString基本用法
  5. python flask web部署_webapp开发之使用apache部署python flask webapp
  6. 零基础学python书籍-图书推荐:《零基础学Python(全彩版)》
  7. Hbase Region拆分入门
  8. python 代码行数统计工具_Python实现代码行数统计工具
  9. 【图像隐写】基于matlab DCT数字水印嵌入+攻击+提取【含Matlab源码 1758期】
  10. 全网最详细SIFT算法原理实现
  11. Win7系统能用一键装机的方式安装win10吗?
  12. PowerApps 中的单选控件
  13. 【计算机三级网络】考前看一看,必过60分
  14. 解决MAC launchpad顽固性图标无法删除问题。
  15. AtCoder Beginner Contest 240 D
  16. 4939-大整数排序 ZCMU
  17. 电话号码字母组合java代码回溯法力扣
  18. 微信小程序(三)详解篇
  19. ppt中加入html,如何在ppt中插入html网页.ppt
  20. 1985年全国计算机编程大赛,关于举办2021年“中国高校计算机大赛-团体程序设计天梯赛”校内选拔赛的通知...

热门文章

  1. 【实践】对于绑定变量看执行计划
  2. Secure Shell概述
  3. 实体-关系联合抽取:CoType: Joint Extraction of Typed Entities and Relations with Knowledge Bases
  4. 利用 ApsaraDB For SQL Server各版本高效而低廉地实现关键业务需求
  5. 博途位置型PID/PI控制器算法 (附SCL源代码)
  6. idea如何打jar包和帮助文档
  7. eudemon 1000 小问题处理之一
  8. 使用JMeter进行并发测试接口
  9. QC新旧七图汇总连载2——帕累托图(排列图)
  10. 37.索引生命周期管理—kibana 索引配置