Интерпретируйте клавиши Backspace в файле

Насколько я понял Ваш вопрос, Вы хотите выполнить некоторые процессы в терминале, способности к Ctrl+C их и, после этого, сохранить окно открытым, с оболочкой.

Если я прав, это могло бы быть выполнено с командой как это:

xfce4-terminal -e "bash -c 'COMMAND; exec bash'"
5
23.04.2014, 09:19
2 ответа

Вот для чего нужен col -b:

$ printf 'a\bb\n' | col -b | od -tc
0000000   b  \n
0000002

$ printf 'aaa\b\b\bbb\n' | col -b | od -tc
0000000   b   b   a  \n
0000004

Эквивалент sed будет выглядеть следующим образом:

bs=$(printf '\b')
sed "s/^[^$bs]*/&\
\
/;:1
s/\n.\{0,1\}\(.*\n\)\([^$bs]\)/\2\
\1/;s/\(.\{0,1\}\)\n\(.*\n\)$bs/\
\1\2/;t1
s/\n//g"

Со времен настоящих телетайпных пишущих машинок (tty), последовательность x\bx иногда встречается для представления жирного x (x, набранного поверх самого себя), x\b_ или _\bx для подчеркнутого x (), и x\b- или -\bx для зачеркивания ().

Другой полезной командой для работы с ними является команда colcrt.

$ printf '_\bfo\b_o\b_ bar b\b-a\b-z\b-\n' | colcrt
foo bar baz
---

Другой вариант - преобразовать \b_ и \b- в комбинированные символы Unicode U+0332 и U+0336:

Предполагая локаль Unicode и zsh, ksh93 или bash:

$ printf 'f\b_o\b_o\b_ bar b\b-a\b-z\b-\n' | sed $'s/\b_/\u0332/g;s/\b-/\u0336/g'
f̲o̲o̲ bar b̶a̶z̶

(передайте в colcrt или col -b для обработки x\bx полужирного).

12
27.01.2020, 20:32

Попробуйте sed

если используется в ksh93/zsh/bash

printf "Foo\b\b\bBar\n" | sed -e :a -e "s/.\{0,1\}"$'\b'"//;ta" > test.log

или более портативный

printf "Foo\b\b\bBar\n" | sed -e :a -e "s/.\{0,1\}$(printf "\b")//;ta" > test.log

или GNU sed:

printf "Foo\b\b\bBar\n" | gsed -re ":a;s/.?\x08//;ta" > test.log

Примечание: этот подход рассматривает '\b' как обратное стирание вместо обратного пробела, поэтому будет разница, если количество символов после числа \b меньше, чем число \b. (Спасибо @StephaneChazelas )

5
27.01.2020, 20:32

Теги

Похожие вопросы