\s
標準の sed 動作に対する GNU sed 拡張です。GNU sed は、デスクトップ/サーバー Linux システムでの実装です。ほとんどの組み込み Linux システムは、 BusyBoxを実行します。これは、フットプリントが著しく小さく、機能が少ないユーティリティ スイートです。
「任意の空白文字」を指定する標準的な方法は、[:space:]
文字クラスです。これは BusyBox でサポートされています (少なくとも、ほとんどの BusyBox インストールでサポートされています。ほとんどの BusyBox 機能は、フットプリントをさらに小さくするために取り除くことができます)。
BusyBox もこのオプションをサポートしていません。基本的な正規表現-r
を使用する必要があります。BRE では、グループをマークします。演算子はなく、 のみです。\(…\)
+
*
echo "$test" | sed 's/[[:space:]]*port[[:space:]]*\([0-9][0-9]*\)[[:space:]]*/<port>\1<\/port>/'
を引用符で囲んでいないため$test
、シェルは変数の値に対して単語分割とワイルドカード展開を実行したことに注意してください。つまり、変数の値は、空白で区切られたファイル名のリストとして扱われ、その後 1 つのスペースで結合されていました。したがって、引用符を省略しても、さまざまな種類の空白を気にする必要はありませんecho $test | sed 's/ *port *([0-9][0-9]*) */<port>\1<\/port>/'
。ただし、 だっ$test
た場合port *
、結果は現在のディレクトリに存在するファイルによって異なります。