[英]How do I surround text beginning with ! until end of line with escape characters in sed?
我想要:
!
開頭的前綴文本帶有ESC E
的行中的字符(是ESC
八進制代碼\033
)ESC F
在行尾的后綴。這是我嘗試過的:
sed $'s/\(!.*\)/\033E\1\033F/'
這是我得到的錯誤:
$ echo "test line ! This part shall be enclosed with ESC commands" | sed $'s/\(!.*\)/\033E\1\033F/'
sh: Syntax error: Bad escape sequence
如果我刪除$
符號,可以看到檢測到並包含文本,但sed
無法插入ESC
字符。
$ echo "test line ! This part shall be enclosed with ESC commands" | sed 's/\(!.*\)/\033E\1\033F/'
test line 033E! This part shall be enclosed with ESC commands033F
我正在使用 FreeBSD 12 sed
,根據手冊頁,它有望成為 IEEE Std 1003.2 POSIC.2 規范的超集。
僅對所需部分應用$'..'
:
$ s='test line ! This part shall be enclosed with ESC commands'
$ echo "$s" | sed 's/\(!.*\)/'$'\033''E\1'$'\033F''/' | cat -v
test line ^[E! This part shall be enclosed with ESC commands^[F
不確定其他版本,但在GNU sed
上,您可以使用十六進制\xHH
和八進制\oNNN
(注意o
)直接轉義,所以你可以這樣做:
$ echo "$s" | sed 's/\(!.*\)/\x1BE\1\x1BF/' | cat -v
test line ^[E! This part shall be enclosed with ESC commands^[F
$ echo "$s" | sed 's/\(!.*\)/\o033E\1\o033F/' | cat -v
test line ^[E! This part shall be enclosed with ESC commands^[F
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.