echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\) \(.*\)/ \2 \1/'
Output yang saya harapkan adalah /usr/local/Axis2C AXIS2C_HOME=
.
Saya tidak tahu apa yang saya lakukan salah. :(
Jawaban sepele adalah "lebih banyak garis miring terbalik, lebih sedikit ruang":
echo "AXIS2C_HOME=/usr/local/Axis2C" | sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
Tetapi jawaban yang lebih luas adalah, "tunggu, apa yang Anda coba lakukan?" Apakah Anda ingin pasangan kunci-nilai dipecah menjadi variabel yang berguna, atau Anda benar-benar hanya mencoba untuk memasukkan input ke dalam sintaks terbalik untuk mengumpankannya ke sesuatu yang lain?
Anda memiliki ruang yang keliru setelah =
. Mencoba:
sed 's/\(^AXIS2C_HOME=\)\(.*\)/\2 \1/'
Berikut ini juga berfungsi dan sedikit lebih pendek. \1
akan menjadi apa pun sebelum yang pertama/
sed 's|^\([^/]*\)\(/.*\)|\2 \1|'
Sed memang bagus, tapi Perl juga bisa melakukan ini, dan itu tidak membutuhkan hutan backslash:
% echo "AXIS2C_HOME=/usr/local/Axis2C" | perl -pe 's/(^AXIS2C_HOME=)(.*)/\2 \1/'
/usr/local/Axis2C AXIS2C_HOME=
Plus, Anda memiliki kekuatan penuh dari mesin ekspresi reguler, sehingga Anda dapat melakukan pola yang lebih kompleks.
sed
GNU sed yang mendukung ekspresi reguler yang diperluas:echo "AXIS2C_HOME=/usr/local/Axis2C" | sed -r 's/(^AXIS2C_HOME=)(.*)/\2 \1/'