我试过了:
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\t/g'
结果是:
eggtsalad
和...
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\\t/g'
结果是:
egg\tsalad
我想要的是:
egg salad
Answers:
尝试:Ctrl+ V,然后按Tab。
使用ANSI-C样式引用: $'string'
sed $'s/foo/\t/'
因此,在您的示例中,只需添加一个$:
echo -e "egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
OSXsed 只能理解不能理解\t模式,根本替代品\t,因为它实际上是sed1982年左右左右遗留下来的古老4.2BSD 。使用文字标签(这bash和vim为Ctrl+ V,Tab),或安装GNUcoreutils以获得更合理sed。
"引号内,shell将处理反斜杠,并且sed看不到它。sed通常使用和正则表达式,'强烈建议使用引号。
sed,这是稍微聪明比4.2BSD一个,但实际上它支持的唯一字符转义\n。
sed用法是在Linux中。)
另一个选项是用于$(printf '\t')插入选项卡,例如:
echo -e "egg\t \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
Ctrl+V Tab您可以复制和粘贴整个命令并更轻松地共享它而又不丢失控制字符的情况相比,它具有更轻便的优点。