私はAndroid端末エミュレーションのsedに慣れてきました。私が使用しているバージョンは、sed
ルート化されていないSonyデバイスにインストールされたおもちゃボックスに含まれています。sed --version
(またはToysbox sed --version)は同じ結果を提供します。
これはGNU sed 9.00ではありません。
今私はtoybox sedの特定のマニュアルを読んで、いくつかの簡単な1行のコードを試しました(手動で始めることができるスクリプトにこれらの行を含めることはアイデアです)。私が最初に気づいたのは、スクリプトを単純な角かっこ(例えば、sed -e 's / foo / bar / 'ファイル)で囲みようとすると正しく解釈されないことです。
コマンドは二重括弧を使用して機能しますが、スクリプトの解釈方法に問題があります(または間違っている可能性があります)。はい。ファイルの単語を置き換えようとしています。ファイルは「stringa di prova」に変換したい文字列「stringa di test」です。その結果、文字列は変更されますが、前の文字列が行の残りの部分に追加されます。
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: $
もう1つ興味深いのは、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が付属しています。以下は、問題が議論されたToy Boxメーリングリスト(悲しいことに逃した)へのリンクです。
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のアップデートを待つ必要があります。