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=
另外,您还拥有正则表达式引擎的全部功能,因此您可以执行更复杂的模式。