從 android shell 中使用 sed

從 android shell 中使用 sed

我正在熟悉 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 中斷。

我還嘗試使用以下命令將字串傳輸到 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 更新。

相關內容