bash 명령 구문을 사용하십시오.
echo "The*quick*brown*fox"|sed s/*/\\n/g
원하는 출력을 얻습니다.
The
quick
brown
fox
그러나 스크립트에서는 다음과 같습니다.
IN_TXT="The*quick*brown*fox"
OUT_TXT=$(echo $IN_TXT|sed s/*/\\n/g)
echo $OUT_TXT
나는 공백이 된다:
The quick brown fox
내가 뭘 잘못했나요?
답변1
OUT_TXT
에서 변수를 사용하면 해당 변수를 참조하지 않습니다 echo
. 이로 인해 쉘은 변수 값을 공백, 탭 및개행 문자단어로 변환된 다음 인수로 제공됩니다 echo
(추가 파일 이름 와일드카드 확장 후). echo
그런 다음 매개변수 사이에 공백을 넣어 출력합니다.
항상 변수 확장을 인용하세요.
echo "$OUT_TXT"
또한 echo $IN_TXT
변수의 확장이 IN_TXT
로 인용되지 않은 경우 "$IN_TXT"
해당 값은 와일드카드 패턴으로 사용되며 일치하는 파일 이름으로 대체됩니다( IN_TXT='*'
예: 테스트용 사용).
sed
귀하의 표현에는 올바르게 인용되지 않았기 때문에 비슷한 문제가 있습니다 .
또한보십시오:
또한 명령은 표준 에 따라 sed
가장 잘 작성 됩니다.sed 'y/*/\n/'
sed
할 수 없다개행 문자를 삽입하려면 이 명령을 사용하십시오 s///
(GNU sed
는 예외입니다). sed
명령y///
하다sed
어떤 구현을 사용 하든 단일 문자를 개행 문자로 변경하는 방법을 알아보세요 .
또는 간단히 다음 tr
과 같이 명령을 사용 tr '*' '\n'
하거나 셸에서 빠른 변수 대체를 수행할 수 있습니다.
printf '%s\n' "${IN_TXT//\*/ }"
또는,
OUT_TXT=${IN_TXT//\*/ }
printf '%s\n' "$OUT_TXT"