欢迎转载!转载时请注明出处:
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.sh
source release_Common.sh
# disable snd-soc-wmt-fm34 back
sed -i '/snd-soc-wmt-fm34/s/^/#&/' fs_patch/load_drivers.sh
上面的代码主要是包括一下几个步骤:
-
删除行首的#字符,打开注释部分代码
-
编译版本
-
将指定行代码再次注释起来
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
具体内容请参考正则表达式相关知识。
本例中是根据工作需要在行首添加和删除字符,如果是在行尾进行操作,则需要使用&通配符;而如果需要在行中的其它位置进行操作,则可能就需要使用到多匹配的方式。
1.
sed
命令;主要作用是查找;新增
删除
和修改替换。user.txt daokr#cat user.txt
ID Name Sex Age
zhang M 19
wang G 20
cheng M 10
huahua M 100查找命令:-n 和 p(print)在user.txt文件中;匹配带h的
行
并...
1、分类Rust的文本类型主要包含6种:character,string,raw string,byte,byte string,raw byte string。1.1、character(rust类型为:char) CHAR_LITERAL :
' ( ~[' n r t] | QUOTE_ESCAPE | ASCII_ESCAPE | UNICODE_ESCAPE ) '
sed
命令常用到的两个选项:
-i : 直接在文件上编辑 (edit files in place)
-e[默认选项]:只在命令
行
输出,而文件不改变(add the script to the commands to be executed)
注:使用
sed
命令可以使用 -i 或者 -e 选项(以下例子仅以-i举例)
(1)
sed
命令
删除
特定
行
号
删除
第N
行
:
sed
-i 'Nd' filename
删除
第N~M
行
:
sed
-i 'N,Md' filename #file的[N,M]
行
都被
删除
在Linux系统中,
sed
是一个非常强大的文本处理工具。它可以用来替换、
删除
或
添加
文本,以满足不同的需求。如果你想使用
sed
命令
添加
指定
字符
,那么你需要掌握一些基本的使用方法。
首先,你需要知道如何使用
sed
命令。
sed
命令的基本语法如下:
$
sed
[选项] ‘命令’ 文件名
其中,选项可以是-i,表示在原文件中进
行
修改;也可以是-e,表示多次执
行
命令;另外还有-n等选项。命令则是要执
行
的操作,可以是替换、
删除
或
添加
等。例如,要替换文本中的某个
字符
串,可以使用下面的命令:
$
sed
's/源
字符
串/目标
字符
串/g' 文件名
这个命令会把文件中所有的源
字符
串替换为目标
字符
串。其中,g表示全局替换。
如果你想使用
sed
命令
添加
指定
字符
,那么可以使用下面的命令:
$
sed
's/$/要
添加
的
字符
/g' 文件名
这个命令会在每一
行
的末尾
添加
指定
字符
。其中,$表示
行
末,要
添加
的
字符
可以是任何
字符
,例如,要在每一
行
末尾
添加
一个空格,可以使用下面的命令:
$
sed
's/$/ /g' 文件名
如果你想
添加
指定
字符
到文本的某个位置,可以使用下面的命令:
$
sed
's/要
添加
的
字符
/要
添加
的
字符
&/g' 文件名
其中,&表示匹配到的
字符
串。例如,要在每个逗号前面
添加
一个空格,可以使用下面的命令:
$
sed
's/,/ &/g' 文件名
总之,使用
sed
命令
添加
指定
字符
需要根据具体的场景来确定操作方法。如果你想进一步掌握
sed
命令的使用方法,可以参考相关的文档或教程。