использование sed из оболочки android

использование sed из оболочки android

Я знакомлюсь с sed в эмуляции терминала Android: версия, которую я использую, sedвходит в toybox, установленный на моем нерутированном устройстве Sony. 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. Вот ссылки на список рассылки 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.

Связанный контент