我试过了:
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\t/g'
Run Code Online (Sandbox Code Playgroud)
结果如下:
eggtsalad
Run Code Online (Sandbox Code Playgroud)
和...
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\\t/g'
Run Code Online (Sandbox Code Playgroud)
结果如下:
egg\tsalad
Run Code Online (Sandbox Code Playgroud)
我想要的是什么:
egg salad
Run Code Online (Sandbox Code Playgroud)
yan*_*yan 81
尝试:Ctrl+ V然后按Tab.
wis*_*cky 34
使用ANSI-C样式引用: $'string'
sed $'s/foo/\t/'
Run Code Online (Sandbox Code Playgroud)
所以在你的例子中,只需添加一个$:
echo -e "egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
Run Code Online (Sandbox Code Playgroud)
gee*_*aur 24
OSX sed 只能根本不理解\t在模式中理解,而不是在替换中\t,因为它基本上是sed从1982年或之后遗留下来的古老的4.2BSD .使用文字标签(这bash和vim是Ctrl+ V,Tab),或安装GNU coreutils以获得更合理sed.
rob*_*nst 15
另一种选择是使用$(printf '\t')插入标签,例如:
echo -e "egg\t \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
Run Code Online (Sandbox Code Playgroud)