为什么这个sed命令与空格不匹配?

时间:2012-09-07 19:41:31

标签: bash sed grep whitespace

这个bash脚本应该从grep结果中删除前导空格:

#!/bin/bash
grep --color=always $@ | sed -r -e's/:[[:space:]]*/:/'

但它与空白不符。如果我将替换文本更改为“ - ”,它会显示在输出中,但它仍然不会删除空格。我试过没有“*”,逃避“*”,“+”等,但没有任何作用。有谁知道为什么不呢?

(我在Ubuntu 12.04上使用sed版本4.2.1。)


谢谢大家,这是我修改后的脚本,它显示了grep颜色并修剪了前导空白:

#!/bin/bash
grep --color=always $@ | sed -r -e's/[[:space:]]+//'

4 个答案:

答案 0 :(得分:6)

您需要删除--color选项才能生效。颜色代码混淆了sed:

grep  $@ | sed -r -e's/:[[:space:]]*/:/'

答案 1 :(得分:2)

grep输出的颜色信息采用特殊字符序列的形式(参见this StackOverflow question的答案),所以如果冒号是彩色的而且空白不是,反之亦然,那么表示其中一个字符序列位于它们之间,因此sed不会将它们视为相邻字符。

答案 2 :(得分:0)

字符类\ s将匹配空白字符和

例如:

$ sed -e "s/\s\{3,\}/  /g" inputFile

将用两个空格替换至少3个空格的每个序列。

答案 3 :(得分:0)

grep --color=always $@ |sed 's/^ //g'

删除前导空格。