使用变量
多行执行
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
多个语句放在一个命令里,一个一个执行。
执行效率还是上面一个快。