2012-10-06 60 views
6

我使用SED一个grep命令切滤波器,基本上变成我的输出与此类似壳牌删除制表符/空格

this line 1 


    this line 2 


    another line 3 


    another line 4 

我试图得到一个输出不含空格的东西之间线条和线条前面所以它看起来像

this line 1 
    this line 2 
    another line 3 
    another line 4 

我想添加another |过滤

回答

5

添加此过滤器,从行的开头删除空白和删除空行,注意它使用两个sed命令,一个删除前导空格和另一个没有内容

| sed -e 's/^\s*//' -e '/^$/d' 

删除线在the Wikipedia article for sed中有一个示例,它使用d命令删除空白行或只包含空格的行,我的解决方案使用转义序列\s来匹配任何空白字符(空格,制表符等),这里是维基百科示例:

sed -e '/^ *$/d' inputFileName 
  • 插入符号(^)匹配行的开头。
  • 美元符号($)匹配行末。
  • 星号(*)匹配前一个字符的零次或多次出现次数。
+0

这是在尝试上面列表中更高的答案之后为我工作的第一个答案。 – k0pernikus

0
(whateverproducesthisoutput)|sed -E 's/^[[:space:]]+//'|grep -v '^$' 

(取决于你sed,可以取代[[:space:]]\s)。

3

这也可以通过tr命令完成。像这样

| tr -s [:space:]

或可替代

| tr -s \\n

,如果你要删除的行只打破,而无需在每个行的开头空间字符。

+3

第一个命令'tr -s [:space:]'不会留下一个空白吗? - 它挤压除连续空格字符之外的所有字符。 – amdn

+0

@amdn是正确的,这为一个简单的方法留下了领先的空白区域 –

+0

+1。任何想法我怎么能保持egrep的颜色? – p1100i

2

您还可以使用grep:

... | grep -o '[^$(printf '\t') ].*' 

在这里,我们打印至少有一个字符不是空白线。通过使用“-o”标志,我们只打印匹配,并且我们强制匹配在非空白字符上开始。

编辑:更改命令,以便它可以删除前导空白字符。

希望这有助于=)

+0

不错......但它不会删除非空行中的前导空格。 – amdn

+0

是啊,我完全错过了= /希望该解决方案修复它 –

+0

在我的系统这消除字符“T”,而不是制表符 – amdn

2

我会做到这一点,短而简单:

sed 's: ::g' 

在你的命令的末尾添加这一点,所有的空格会噗。例如试试这个命令:

cat/proc/meminfo | sed 's: ::g' 
0

使用grep "^." filename而printing.Here,以任何字符的行匹配,使得空行冷落删除空行。