传递参数给Sed

使用变量
1、在大多数网上是这样写的:
$ atk="Q1_B1B2.img"
$ line=" <program SECTOR_SIZE_IN_BYTES="512" file_sector_offset="0" filename="" label="fsg" num_partition_sectors="3072""
$ echo $line | sed -e  's/filename="" label="fsg"/filename=${atk} label="fsg"/g '
<program SECTOR_SIZE_IN_BYTES=512 file_sector_offset=0 filename= label=fsg num_partition_sectors=3072

$ echo $line | sed -e  "s/filename="" label="fsg"/filename="$atk" label="fsg"/g "
<program SECTOR_SIZE_IN_BYTES=512 file_sector_offset=0 filename=Q1_B1B2.img label=fsg num_partition_sectors=3072

变量不能展开,需要在sed里将单引号替换成双引号。
这个的确能用,在命令行的方式下可以用。但是如果把sed命名放在脚边里执行,$atk不会自己替换。
#!/bin/bash #这个Shell实际是Ubuntu默认的dash

atk=Q1_B1B2.img

sed -e  "s/filename="" label="fsg"/filename=$atk label="fsg"/g "
不会有任何变化,变量没有引用,还是$atk。放在双引号里的语句不执行。

参考文档:
example:  sed 's/'"$arg"'//g'

直到我改成:
sed -e 's/filename="" label="fsg"/filename=\" '$atk '\" label="fsg"/g' rawprogram_unsparse.xml >n1.xml
将变量替换放在单引号里,替换就能发生。

多行执行
#!/bin/bash

atk=Q1_B1B2.img

#./han.sed rawprogram_unsparse.xml >n.xml

sed -e '{
s/filename="" label="modemst1"/filename="dummy.bin" label="modemst1"/g
s/filename="" label="modemst2"/filename="dummy.bin" label="modemst2"/g
s/filename="" label="fsg"/filename=\"'$atk'\" label="fsg"/g
}' rawprogram_unsparse.xml >n1.xml
多行语句放一起执行。

sed -e 's/filename="" label="modemst1"/filename="dummy.bin" label="modemst1"/g' \
    -e 's/filename="" label="modemst2"/filename="dummy.bin" label="modemst2"/g' \
    -e 's/filename="" label="fsg"/filename=\"'$atk'\" label="fsg"/g' \
       rawprogram_unsparse.xml >n1.xml
多个语句放在一个命令里,一个一个执行。
执行效率还是上面一个快。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值