
"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