簡體   English   中英

如何包圍以開頭的文本? 直到 sed 中的轉義字符結束?

[英]How do I surround text beginning with ! until end of line with escape characters in sed?

我想要:

  1. !開頭的前綴文本帶有ESC E的行中的字符(是ESC八進制代碼\033
  2. 在文本上方加上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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM