我希望删除从stdin中某些退格字符(\b)的固定数量。到目前为止,我尝试了以下方法:
但它不起作用。我该如何使用sed或其他unix shell工具实现这一目标?
echo -e "1234\b\b\b56" | sed 's/\b{3}//'
但它不起作用。我该如何使用sed或其他unix shell工具实现这一目标?
你可以使用回退符的十六进制值:
echo -e "1234\b\b\b56" | sed 's/\x08\{3\}//'
你还需要转义大括号。
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'
echo -e"1234\b\b\b56" | perl -pe's/ \\ 010 // g'
- Eugene Yarmash使用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
\
和b
序列,而不是三个退格字符的序列。 - Paŭlo Ebermann请注意,如果您希望同时删除被删除的字符,请查看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
echo -e“1234 \ b \ b \ b \ b5678”| sed -r's / \ o010 {3} / a /'
- codecraft