![특수 문자를 텍스트 편집기에서 보려면 어떻게 평가해야 합니까?](https://linux55.com/image/99032/%ED%8A%B9%EC%88%98%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8E%B8%EC%A7%91%EA%B8%B0%EC%97%90%EC%84%9C%20%EB%B3%B4%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%8F%89%EA%B0%80%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
"line1\n\nline2\nline3"이라는 텍스트가 있고 이를 콘솔에서 보거나 텍스트 편집기로 파이프하려고 한다고 가정해 보겠습니다.
line1
line2
line3
따라서 특수 문자가 평가됩니다. 정규식을 바꾸지 않고 이 작업을 수행할 수 있나요?
답변1
Bash에는 백슬래시 확장 printf
기능이 내장되어 있으며, 인용되지 않은 셸 명령에서 사용할 수 있도록 문자열 형식 지정을 지원합니다(예: 셸에서 특별히 백슬래시로 처리하는 모든 문자를 이스케이프 처리함).%b
%q
즉, Bash에서는 다음을 사용할 수 있습니다.
printf '%b\n' 'line1\n\nline2\nline3'
얻기 위해
line1
line2
line3
뒤에 줄 바꿈을 원하지 않으면 line3
대신 사용하십시오 printf '%b' 'line1\n\nline2\nline3'
.
역함수( %q
)도 유용합니다.
printf '%q' '(foo $bar baz]'
산출
\(foo\ \$bar\ baz\]
다음과 같이 백슬래시가 포함된 문자열을 포함하는 Bash 변수가 있는 경우
myvar='line1\n\nline2\nline3'
확장된 이스케이프 시퀀스를 사용할 수 있습니다.
mytext=$(printf '%b' "$myvar")
이스케이프 시퀀스가 포함된 리터럴 문자열만 지정하려면 다음을 사용하세요 $''
.
mytext=$'line1\n\nline2\nline3'
답변2
인라인 에코를 사용하십시오.
$ echo -e "line1\n\nline2\nline3"
line1
line2
line3