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=

또한 정규식 엔진의 모든 기능을 사용하므로 더 복잡한 패턴을 수행할 수 있습니다.

관련 정보