系统相关
首页 > 系统相关> > 文本处理 – 从android shell使用sed

文本处理 – 从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