Figlet에서 생성된 일부 텍스트에서 모든 백슬래시를 이스케이프 처리하려고 합니다. 이것이 내가 지금까지 가지고 있는 것입니다.
figlet -f $font -t "Foo Bar" | sed -e "s|\\|\\\\|g"
어떤 이유로 이것은 작동하지 않지만 작동합니다.
figlet -f $font -t "Foo Bar" | sed -e "s| |X|g"
sed가 여기서 어떻게 작동하는지 오해하고 있습니까? 이것에 대해서도 비슷한 게시물을 찾을 수 없습니다.
답변1
sed -e "s|\\|\\\\|g"
큰따옴표는 구문 분석을 시도하는 셸에서 포함된 백슬래시를 보호하지 않습니다 . 더 간단한 예를 사용하면 이를 더 쉽게 확인할 수 있습니다.
$ echo 'blah\blah'| sed -e "s|\\|blah|g"
sed: -e expression #1, char 10: unterminated `s' command
$ echo 'blah\blah'| sed -e 's|\\|blah|g'
blahblahblah
첫 번째 양식을 사용하려면 sed
큰따옴표 대신 작은따옴표로 전환해야 합니다.
$ figlet -t "Foo Bar" | sed -e 's|\\|\\\\|g'
_____ ____
| ___|__ ___ | __ ) __ _ _ __
| |_ / _ \\ / _ \\ | _ \\ / _` | '__|
| _| (_) | (_) | | |_) | (_| | |
|_| \\___/ \\___/ |____/ \\__,_|_|
큰따옴표를 사용해야 하는 경우 셸을 이스케이프하려면 더 많은 백슬래시가 필요합니다 sed
.
$ figlet -t "Foo Bar" | sed -e "s|\\\|\\\\\\\|g"
_____ ____
| ___|__ ___ | __ ) __ _ _ __
| |_ / _ \\ / _ \\ | _ \\ / _` | '__|
| _| (_) | (_) | | |_) | (_| | |
|_| \\___/ \\___/ |____/ \\__,_|_|