나는 이것을 가지고있다:
echo $MSG | sed -e $'s/;/\\\n/g'
sed의 결과를 $MSG2라는 새 변수에 넣고 싶습니다.
그것은 다음과 같습니다:
$MSG2=echo $MSG|sed -e $'s/;/\\\n/g'
어떻게 해야 합니까?
감사합니다!
답변1
작업에는 파이프나 sed가 필요하지 않습니다. bash
아래와 같이 내장 명령을 사용하면 이 모든 작업을 보다 효율적으로 수행할 수 있습니다 .
NewMsg=${MSG//;/$'\n'}
${MSG//;/$'\n'}
예이다패턴 교체. 각 항목을 ;
개행 문자로 바꿉니다 . 결과는 쉘 변수에 저장됩니다 NewMsg
.
예를 들어:
$ Msg='1;2;3'
$ NewMsg=${Msg//;/$'\n'}
$ echo "$NewMsg"
1
2
3
노트:
가장 좋은 방법은 소문자 또는 대소문자 혼합 쉘 변수를 사용하는 것입니다. 시스템은 변수에 모두 대문자를 사용하므로 실수로 변수 중 하나를 덮어쓰는 것을 원하지 않습니다.
명시적으로 원하지 않는 한분사그리고경로명 확장쉘 변수는 항상 큰따옴표로 묶으십시오. 따라서 사용하고 싶을 때는
echo $MSG
대신 사용하십시오echo "$MSG"
.또한 에코하려는 문자열에 어떤 문자가 포함될지 알지 못하면
echo
문제가 발생하며 사용하기에 더 안전하고 이식성이 뛰어납니다printf '%s\n' "$MSG"
. 자세한 내용은 Stéphane Chazelas를 참조하세요.echo
VS에 대한 매우 유익한 토론printf
.명령 대체를 사용하는 경우
$(...)
쉘은 후행 줄 바꿈을 제거합니다. 이는 종종 도움이 되지만 때로는 이 변경이 불필요할 수도 있습니다.
답변2
다음과 같이 변수에 할당하면 됩니다.
MSG2=$(echo $MSG | sed -e $'s/;/\\n/g')