sed 反转两个单词

sed 反转两个单词
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=

另外,您还拥有正则表达式引擎的全部功能,因此您可以执行更复杂的模式。

相关内容