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=
또한 정규식 엔진의 모든 기능을 사용하므로 더 복잡한 패턴을 수행할 수 있습니다.