sed/grep脚本编写

一、sed -i s/"str1"/"str2"/g `grep "str1" -rl --include="*.[ch]" ./`
将当前目录下的所有.c、.h文件中的str1字符串替换为str2字符串。

参数解释: 
sed:
-i 表示操作的是文件,``括起来的grep命令,表示将grep命令的的结果作为操作文件
s/"str1"/"str2"/表示查找str1并替换为str2,后面跟g表示一行中有多个str1的时候,都替换,而不是仅替换第一个

grep:
-r表示查找当前目录以及所有子目录
-l表示仅列出符合条件的文件名,传给sed命令做替换操作
--include="*.[ch]" 表示仅查找.c、.h文件


注:如果不需要查找子目录,仅需要在当前目录替换,可直接用sed命令:

sed -i s/"str1"/"str2"/g ./*.[ch]

三、sed命令总是提示 字符s不合法,按照已有的bat文件要引用的字符串如果有双引号的话,要使用两个双引号,偶尔试了一下\",发现就解决了这个问题


下面这种就是从A修改成B时,A和B中都是路径,那么在sh中,要把目录/改成\/

 

四、
sed '1i 添加的内容' file  #这是在第一行前添加字符串
sed '$i 添加的内容' file  #这是在最后一行行前添加字符串
sed '$a添加的内容' file  #这是在最后一行行后添加字符串

五、
1、修改:
%SCRIPT_DIR%\tools\sed -i "s/<at_Time\/>/<at_Time>5<\/at_Time>/g" %IEMP_HOME%\etc\oms.core\smproxy.xml

2、在关键字所在行后加1行
 %SCRIPT_DIR%\tools\sed -i "/<config name=\"as\">/a\<param name=\"resptype\">json<\/param>" %IEMP_HOME%\etc\oms.ros\rosinternal.xml

3、查询是否存在
%SCRIPT_DIR%\tools\grep "resptype" %IEMP_HOME%\etc\oms.ros\rosinternal.xml
echo %errorlevel%
if %errorlevel% equ 1 ( rem 1代表不存在,0代表存在

4、在最后一行添加
%SCRIPT_DIR%\tools\sed -i "$i\<config name=\"uiThirdSysNum\">" %IEMP_HOME%\etc\oms.nbi\system_integration_config.xml
sed '1i 添加的内容' file  #这是在第一行前添加字符串
sed '$i 添加的内容' file  #这是在最后一行行前添加字符串
sed '$a添加的内容' file  #这是在最后一行行后添加字符串

4.2 .sh中,这条语句要用单引号:
 sed -i '$i\skinSwitch    =TRUE' $CUR_PATH/files/client_frametest_1.properties

4.3 .bat中,这条语句用双引号:
%SCRIPT_DIR%\tools\sed -i "$i\<config name=\"alarmColorMenuConfig\">" %IEMP_HOME%\etc\oms.fm\fm.xml

5、
sed -i '3s/aaa/fff/' file                --表示针对file文件中的第三行,将其中的aaa替换为fff

sed -i '/xxx/s/aaa/fff/g' file    --表示针对文件,找出包含xxx的行,并将其中的aaa替换为fff

sed -i '1s/[#*]/fff/gp' file    --表示针对文件第1行,将其中的#号或是*号替换为fff

6、
%SCRIPT_DIR%\tools\grep  -n "<config name=\"securityMenuConfig\">"  %IEMP_HOME%\etc\oms.sm\sm.xml |cut -d \":\" -f 1

7、bat脚本中获取已:为分隔符获取分隔符前面的第一列:即获取包含此关键字符的行号
rem %SCRIPT_DIR%\tools\grep  -n "<config name=\"securityMenuConfig\">"  %IEMP_HOME%\etc\oms.sm\sm.xml |%SCRIPT_DIR%\tools\awk -F":" "{print $1}"

8.1、查找文件中存在securityMenuConfig的行号(110:),然后取不包含最后一个字符的前面的数字,即期望的行号(110),然后设置变量为110+1,从而能在111行进行修改,把true改为false

 for /f %%i in ('%SCRIPT_DIR%\tools\grep  -n "<config name=\"securityMenuConfig\">"  %IEMP_HOME%\etc\oms.sm\sm.xml') do  set "SysSeconds=%%i"
echo %SysSeconds%
SET /a row2= %SysSeconds:~0,-1%+1
echo %row2%
 %SCRIPT_DIR%\tools\sed -i  "%row2%s/<param name=\"enable\">true<\/param>/<param name=\"enable\">false<\/param>/" %IEMP_HOME%\etc\oms.sm\sm.xml
8.2 、达到上述功能,要在shell下的编写:
SysSeconds=`grep  -n "<config name=\"securityMenuConfig\">"  ${iEMP_HOME}/etc/oms.sm/sm.xml`
echo $SysSeconds
let row2=${SysSeconds%:*}+1
echo $row2
 sed -i ""$row2"s/<param name=\"enable\">true<\/param>/<param name=\"enable\">false<\/param>/g" ${iEMP_HOME}/etc/oms.sm/sm.xml

9、sh脚本,grep命令返回值给一个变量:
SysSeconds=`grep  -n "<config name=\"securityMenuConfig\">"  ${iEMP_HOME}/etc/oms.sm/sm.xml`
echo $SysSeconds

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值