我需要替换这一行
`<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
</permission>`
用这个
`<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>`
换句话说,如果文件group gid="media_rw"
中没有包含权限WRITE_EXTERNAL_STORAGE,我需要添加/system/etc/permissions/platform.xml
但我收到错误:替换表达式中的错误选项。我正在使用BusyBox v1.22.1和所有小程序
我的代码:
http://pastebin.com/VTURRpDu。我在pastebin上发布了代码,因为我的代码没有正确显示。提前致谢
答案 0 :(得分:2)
如果你需要漂亮的格式化,你将不得不注入新行和标签(这让我感到痛苦);下面是一个不整洁但以其他方式形成的等价物:
我认为你只需要匹配插入点(倒数第二行或最后一行):
cat infile | sed -e "s/<\/permission>/<group gid=\"media_rw\"\/><\/permission>/"
给出
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw"/></permission>
由于我一直在使用sed中的标签和换行符,所以如果你拥有它并且你坚持输出相当好的话,awk会很好地做到这一点。
cat infile | awk '/\/permission/ { print "\t<group gid=\"media_rw\"\/>";}
/./ {print $0;}
'
使用制表符和换行符给出相同的内容:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw"/>
</permission>
编辑:针对in-file和针对组WRITE_EXTERNAL_STORAGE标记
我会假设此块中键值集的排序并不重要。这将使用开始的权限标签来执行插入,现在使用sed上的 -i 来编辑原始文件。也切换到管道分隔符(避免\ / \ / \ /)。最后,使用&amp;将匹配的文本放入而不是输入 - 假设您的busybox build of sed可以执行此操作。
sed -e "s|<permission name=\"android.permission.WRITE_EXTERNAL_STORAGE\" >$|&<group gid=\"media_rw\"/>|" -i infile
您匹配的标签只需要足够独特。将EOL标记($)添加到匹配部分以仅替换一次。该匹配将无法再次运行,因为该行已更改。