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