![sed bash 스크립트가 예기치 않게 문자를 줄 바꿈 대신 공백으로 바꿉니다.](https://linux55.com/image/172035/sed%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80%20%EC%98%88%EA%B8%B0%EC%B9%98%20%EC%95%8A%EA%B2%8C%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%A4%84%20%EB%B0%94%EA%BF%88%20%EB%8C%80%EC%8B%A0%20%EA%B3%B5%EB%B0%B1%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
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"