10

我使用了一个带有 sed 和 cut 过滤器的 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

我想添加另一个 | 筛选

4

6 回答 6

12

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

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

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

sed -e '/^ *$/d' inputFileName 
  • 插入符号 (^) 匹配行的开头。
  • 美元符号 ($) 与行尾匹配。
  • 星号 (*) 匹配前一个字符的零次或多次出现。
于 2012-10-06T21:20:20.950 回答
10

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

| tr -s [:space:]

或者

| tr -s \\n

如果您只想删除换行符,而不是每行开头的空格字符。

于 2012-10-06T21:21:47.753 回答
6

我会这样做,简短而简单:

sed 's: ::g'

在你的命令末尾添加这个,所有的空格都会消失。例如试试这个命令:

cat /proc/meminfo | sed 's: ::g'
于 2016-03-02T11:40:30.783 回答
3

您还可以使用 grep:

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

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

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

希望这会有所帮助=)

于 2012-10-07T00:49:50.737 回答
2

用于grep "^." filename在打印时删除空白行。此处,匹配以任何字符开头的行,以便忽略空白行。 ^表示行的开始。 .检查任何字符。

于 2017-12-27T04:03:05.127 回答
0
(whateverproducesthisoutput)|sed -E 's/^[[:space:]]+//'|grep -v '^$'

(取决于您的sed,您可以替换[[:space:]]\s)。

于 2012-10-06T21:21:01.653 回答