Я хочу удалить фиксированное число вхождений некоторых символов возврата (\ b) из стандартного ввода.До сих пор я пробовал это:
echo -e "1234\b\b\b56" | sed 's/\b{3}//'
Но это не работает.Как я могу добиться этого, используя sed или какой-либо другой инструмент оболочки Unix?
Вы можете использовать шестнадцатеричное значение для возврата на обратную сторону:
echo -e "1234\b\b\b56" | sed 's/\x08\{3\}//'
Вам также необходимо экранировать скобки.
sed интерпретирует \b как границу слова. Я получил это для работы в Perl, например, так:
\b
echo -e "1234\b\b\b56" | perl -pe '$b="\b";s/$b//g'
Вы можете использовать tr:
tr
echo -e "1234\b\b\b56" | tr -d '\b' 123456
Если вы хотите удалить три последовательных возврата, вы можете использовать Perl:
echo -e "1234\b\b\b56" | perl -pe 's/(\010){3}//'
Обратите внимание, что если вы хотите удалить также удаляемые символы, взгляните на ansi2html.sh , который содержит следующую обработку:
printf "12..\b\b34\n" | sed ':s; s#[^\x08]\x08##g; t s'
С помощью sed:
echo "123\b\b\b5" | sed 's/[\b]\{3\}//g'
Вы должны выйти из { и } в {3}, а также обработать специальное \b, используякласс персонажей.
{
}
{3}
[birryree@lilun ~]$ echo "123\b\b\b5" | sed 's/[\b]\{3\}//g' 1235
Perl здесь не нужен!
# version 1 echo -e "1234\b\b\b56" | sed $'s/\b\{3\}//' | od -c # version 2 bvar="$(printf '%b' '\b')" echo -e "1234\b\b\b56" | sed 's/'${bvar}'\{3\}//' | od -c