文本处理 – 从android shell使用sed
作者:互联网
我熟悉android终端仿真上的sed:我使用的sed中包含的sed版本安装在我的无根索尼设备上. sed –version(或toybox sed –version)给出了相同的结果:
这不是GNU sed 9.00
现在,我从toybox sed阅读了特定的手册,并尝试了一些简单的一个衬垫(想法是将那些包含在我可以手动启动的脚本中).现在我注意到的第一件事是,如果我尝试将脚本包含在简单括号中(es sed -e’s / foo / bar /’文件),则无法正确解释.
该命令使用双括号,但我遇到脚本解释方式的问题(或者我做错了).例.我试着替换文件中的单词.该文件是一个字符串“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版本中有什么东西?
解决方法:
我可以确认(感谢#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
太糟糕了,我将不得不等待未来Android更新的当前版本的toybox.
标签:android,sed,text-processing 来源: https://codeday.me/bug/20190816/1672093.html