我想从stdin中删除固定数量的一些退格字符ocurrences(\ b)。到目前为止,我已经尝试过这个:
echo -e "1234\b\b\b56" | sed 's/\b{3}//'
但它不起作用。如何使用sed或其他一些unix shell工具实现这一目标?
答案 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