【发布时间】:2011-03-03 14:11:25
【问题描述】:
我想从标准输入中删除固定数量的一些退格字符( \b )。到目前为止,我已经尝试过:
echo -e "1234\b\b\b56" | sed 's/\b{3}//'
但它不起作用。如何使用 sed 或其他一些 unix shell 工具来实现这一点?
【问题讨论】:
我想从标准输入中删除固定数量的一些退格字符( \b )。到目前为止,我已经尝试过:
echo -e "1234\b\b\b56" | sed 's/\b{3}//'
但它不起作用。如何使用 sed 或其他一些 unix shell 工具来实现这一点?
【问题讨论】:
退格可以使用十六进制值:
echo -e "1234\b\b\b56" | sed 's/\x08\{3\}//'
你还需要转义大括号。
【讨论】:
echo -e "1234\b\b\b\b5678" | sed -r 's/\o010{3}/a/'
sed 将\b 解释为单词边界。我让它在 perl 中像这样工作:
echo -e "1234\b\b\b56" | perl -pe '$b="\b";s/$b//g'
【讨论】:
echo -e "1234\b\b\b56" | perl -pe 's/\010//g'
你可以使用tr:
echo -e "1234\b\b\b56" | tr -d '\b'
123456
如果要删除三个连续的退格,可以使用Perl:
echo -e "1234\b\b\b56" | perl -pe 's/(\010){3}//'
【讨论】:
使用 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
【讨论】:
` and b` 序列,而不是 3 个退格字符的序列。
请注意,如果您还想删除被删除的字符,请查看ansi2html.sh,其中包含如下处理:
printf "12..\b\b34\n" | sed ':s; s#[^\x08]\x08##g; t s'
【讨论】:
这里不需要 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
【讨论】: