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

Linux 如何使用sed替换退格字符(\b)?,linux,bash,shell,sed,Linux,Bash,Shell,Sed,我想从stdin中删除一些固定数量的退格字符ocurrence(\b)。到目前为止,我已经尝试过: echo -e "1234\b\b\b56" | sed 's/\b{3}//' 但它不起作用。如何使用sed或其他unixshell工具实现这一点?您可以使用tr: echo -e "1234\b\b\b56" | tr -d '\b' 123456 如果要删除三个连续的退格,可以使用Perl: echo -e "1234\b\b\b56" | perl -pe 's/(\010){3}//

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

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

但它不起作用。如何使用sed或其他unixshell工具实现这一点?

您可以使用
tr

echo -e "1234\b\b\b56" | tr -d '\b'
123456
如果要删除三个连续的退格,可以使用Perl:

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

sed将
\b
解释为单词边界。我在perl中实现了如下功能:

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

echo“123\b\b\b5”| sed的/[\b]\{3\}//g'

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

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

您可以使用十六进制值作为退格:

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

您还需要对大括号进行转义。

注意,如果您还想删除被删除的字符,请查看其中包含的处理,如:

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

ASCII值也会起作用:
echo-e“1234\b\b\b56”| perl-pe's/\010//g'
请参阅我对上述问题的评论以下内容做了工作:echo-e“1234\b\b5”| perl-pe's/\010{2}/t/g'我不想用空空间替换所有出现的\b,只替换一定数量的出现,这就是我尝试使用重复模式{3}“你在这里作弊。您正在替换长度为3的
`和
b`序列,而不是3个退格字符的序列。或者您可以将-r flah用于扩展模式:
echo-e“1234\b\b\b\b5678”| sed-r's/\o010{3}/a/'
这是我所知的GNU-sed。