sed は 2 つの単語を逆に置き換えます。

sed は 2 つの単語を逆に置き換えます。
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'

私が望む出力は/usr/local/Axis2C AXIS2C_HOME=

何が間違っているのかわかりません。 :(

答え1

簡単な答えは「バックスラッシュが多く、空白が少ない」です。

echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'

しかし、より広い答えは「待って、何をしますか?」です。キーと値のペアを有用な変数に分割しますか、または入力を逆方向の構文に混ぜて何かに供給しますか?別の?

答え2

その後に間違ったスペースがあります=。試してみてください:

sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'

以下のコードも機能し、少し短いです。\1最初の以前は何でもなります/

sed 's|^\([^/]*\)\(/.*\)|\2 \1|'

答え3

Sedは素晴らしいですが、Perlもこれを行うことができ、多くのバックスラッシュは必要ありません。

% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/\2 \1/'
/usr/local/Axis2C AXIS2C_HOME=

また、正規表現エンジンのすべての機能を使用しているため、より複雑なパターンを実行できます。

関連情報