sed bash 스크립트가 예기치 않게 문자를 줄 바꿈 대신 공백으로 바꿉니다.

sed bash 스크립트가 예기치 않게 문자를 줄 바꿈 대신 공백으로 바꿉니다.

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"

관련 정보