如何使用sed替换退格符(\ b)?

时间:2011-03-03 14:11:25

标签: linux bash shell sed

我想从stdin中删除固定数量的一些退格字符ocurrences(\ b)。到目前为止,我已经尝试过这个:

echo -e "1234\b\b\b56" | sed 's/\b{3}//'

但它不起作用。如何使用sed或其他一些unix shell工具实现这一目标?

6 个答案:

答案 0 :(得分:9)

您可以将十六进制值用于退格:

echo -e "1234\b\b\b56" | sed 's/\x08\{3\}//'

你还需要逃避大括号。

答案 1 :(得分:4)

您可以使用tr

echo -e "1234\b\b\b56" | tr -d '\b'
123456

如果要删除三个连续的退格键,可以使用Perl:

echo -e "1234\b\b\b56" | perl -pe 's/(\010){3}//'

答案 2 :(得分:4)

sed将\b解释为单词边界。我让它在perl中工作如此:

echo -e "1234\b\b\b56" | perl -pe '$b="\b";s/$b//g'

答案 3 :(得分:2)

使用sed:

echo "123\b\b\b5" | sed 's/[\b]\{3\}//g'

您必须转义{中的}{3},并使用字符类处理\b特殊内容。

[birryree@lilun ~]$ echo "123\b\b\b5" | sed 's/[\b]\{3\}//g'
1235

答案 4 :(得分:2)

请注意,如果您要删除要删除的字符,请查看包含以下处理的ansi2html.sh

printf "12..\b\b34\n" | sed ':s; s#[^\x08]\x08##g; t s'

答案 5 :(得分:1)

这里不需要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