Как мне окружить текст, начиная с ! до конца строки с escape-символами в sed?

#regex #sed #freebsd

Вопрос:

Я хочу:

  1. префиксный текст, начинающийся с ! символа в строке с ESC E (является ESC восьмеричным кодом 33 )
  2. суффикс над текстом с ESC F в конце строки.

Это то, что я пробовал:

 sed 

Это ошибка, которую я получаю:

 $ echo "test line     ! This part shall be enclosed with ESC commands" | sed 

Если я удалю  $  знак, будет видно, что текст обнаружен и заключен, но  sed  не может вставить  ESC  символы.

 $ echo "test line     ! This part shall be enclosed with ESC commands" | sed 's/(!.*)/33E133F/'
test line     033E! This part shall be enclosed with ESC commands033F
 

Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.


Ответ №1:

Подавайте $'..' заявку только на необходимую часть:

 $ s='test line     ! This part shall be enclosed with ESC commands'
$ echo "$s" | sed 's/(!.*)/'

Не уверен насчет других версий, но на  GNU sed  , вы можете использовать шестнадцатеричные  xHH  и восьмеричные  oNNN  (обратите внимание  o  ) побеги напрямую, так что вы можете сделать:

 $ echo "$s" | sed 's/(!.*)/x1BE1x1BF/' | cat -v
test line     ^[E! This part shall be enclosed with ESC commands^[F

$ echo "$s" | sed 's/(!.*)/o033E1o033F/' | cat -v
test line     ^[E! This part shall be enclosed with ESC commands^[F
 


s/(!.*)/33E133F/'
Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/'
sh: Syntax error: Bad escape sequence
Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/'

Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


33»E1′

Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’
sh: Syntax error: Bad escape sequenceЕсли я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’

Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


33F»/’ | cat -v
test line ^[E! This part shall be enclosed with ESC commands^[F

Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’
sh: Syntax error: Bad escape sequenceЕсли я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать:


s/(!.*)/33E133F/’

Это ошибка, которую я получаю:


Если я удалю $ знак, будет видно, что текст обнаружен и заключен, но sed не может вставить ESC символы.


Я использую FreeBSD 12 sed , которая, как ожидается, будет дополнением спецификации IEEE Std 1003.2 POSIC.2 согласно справочной странице.

Ответ №1:

Подавайте $'..' заявку только на необходимую часть:


Не уверен насчет других версий, но на GNU sed , вы можете использовать шестнадцатеричные xHH и восьмеричные oNNN (обратите внимание o ) побеги напрямую, так что вы можете сделать: