我正在熟悉 Android 终端仿真上的 sed:我正在使用的版本sed
包含在安装在我的未 root 索尼设备上的玩具盒中。sed --version
(或 toybox sed --version)给出相同的结果:
这不是 GNU sed 9.00
现在,我阅读了 toybox sed 中的具体手册,并尝试了一些简单的单行代码(想法是将这些行代码包含在我可以手动启动的脚本中)。现在我注意到的第一件事是,如果我尝试将脚本包含在简单的括号中(es sed -e 's/foo/bar/' file),则不会正确解释。
该命令使用双括号工作,但我在解释脚本的方式上遇到问题(或者也许我做错了)。例子。我尝试替换文件中的单词。该文件是一个字符串“stringa di test”,我打算将其转换为“stringa di prova”。结果是该字符串被替换,但前一个字符串被附加到该行的其余部分:
user:$ ls
file.txt
n.sh
s.sh
save
script_gian.sh
sed_script
user: $ cat file.txt
stringa di test
user:$sed -i -e "s/test/prova/g" file.txt <
^C1|user:$ cat file.txt
stringa di test
user:$ sed -r -e "s/test/prova/1" file.txt > f.txt <
user:$ ls
f.txt
file.txt
file.txtFD4OVI
n.sh
s.sh
save
script_gian.sh
sed_script
user:$ cat f.txt
stringa di provastringa di test
user:$ cat file.txt
stringa di test
user: $
另一个有趣的事情是,尝试使用 g 标志(全局)会导致 sed 挂起,并且必须使用 CONTROL C 中断。 -i 命令也会导致 sed 挂起。
我还尝试使用以下命令将字符串传输到 sed:
cat file.txt | sed -e "s/foo/bar/" > newfile.txt
但结果是完全一样的。字符串内的单词被替换,并且替换之前的行被附加在该行之后(这也会删除该行中的剩余字符)-我是否使用错误或我正在尝试的sed
版本中存在某些内容sed
使用?
答案1
我可以确认(感谢 #toybox irc 频道)该问题确实是 toybox sed 中的一个错误,本应已解决,但 Android M 仍然附带过时版本的 toybox。这些是玩具箱邮件列表的链接(可惜我错过了),其中讨论了问题:
http://lists.landley.net/pipermail/toybox-landley.net/2016-January/007897.html
http://lists.landley.net/pipermail/toybox-landley.net/2015-September/004415.html
太糟糕了,我将不得不等待当前版本的 toybox 以及未来的 Android 更新。