web-dev-qa-db-ja.com

BusyBoxのsedコマンドは異なる構文を期待していますか?

私は質問を正しく表現したと思います。 'sed'を多用するスクリプトがあります。 GNU 'sed'を使用すると、ubuntuでうまく機能します。しかし、BusyBoxで実行しようとすると、失敗します。GNUを取得する方法はありますか? = busyboxでsed?私はLinuxのプロではありません。

5
tzippy

Busybox自体は、sedの実装が制限されている可能性があります。 sedバイナリをある場所にコピーして、フルパスで直接ポイントして呼び出すことができます。

BusyBoxの組み込みsedがサポートしていないエスケープを置き換えることで、いくつかの非互換性の問題を修正できます。 \sエスケープを[[:space:]]に置き換えると、スペースマッチングの問題が解決されます。

5
Serge

busybox がどのように機能するかを誤解しているようです。このツールは、呼び出される名前(またはサブコマンド)に応じて異なる方法で動作する単一の実行可能ファイルです。 sedバイナリ(またはbusybox sed)を指すシンボリックリンクbusyboxを呼び出すと、「sed」機能が実行されます。

GNU sedをbusybox環境に入れるには、sedへのbusyboxシンボリックリンクを削除し、GNU sedバイナリとそれが依存するライブラリ。lddコマンドでライブラリを識別できます。

$ ldd /bin/sed
    linux-gate.so.1 =>  (0xb7f78000)
    libselinux.so.1 => /lib/libselinux.so.1 (0xb7f56000)
    libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7e0f000)
    libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7e0a000)
    /lib/ld-linux.so.2 (0xb7f79000)
2
Ansgar Wiechers