外壳删除制表符/空格

问题描述 投票:0回答:7

我使用了带有 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

我想添加另一个|过滤器

grep
7个回答
12
投票

添加此过滤器以删除行开头的空格并删除空行,请注意,它使用两个

sed
命令,一个用于删除前导空格,另一个用于删除没有内容的行

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

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


sed -e '/^ *$/d' inputFileName

插入符号 (^) 与行的开头匹配。
  • 美元符号 ($) 与行尾匹配。
  • 星号 (*) 匹配零次或多次出现的前一个字符。

11
投票
tr

命令来完成。就像这样


| tr -s [:space:]


或者

| tr -s \\n


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


7
投票

sed 's: ::g'

将其添加到命令末尾,所有空格都会消失。例如尝试这个命令:

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



4
投票

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

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

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

希望这有帮助=)


2
投票
grep "^." filename

删除空行。这里,以任何字符开头的行都会被匹配,从而省略空行。

^
表示行的开始。
.
检查是否有任何字符。
    


0
投票
(根据您的
sed

,您可以将

[[:space:]]
替换为
\s
)。
    


0
投票
删除空格和制表符:

echo $'spaces tabs\ttabs' | tr -d '\t '

输出:spacetabstabs

仅删除选项卡:

echo $'spaces tabs\ttabs' | tr -d '\t'

输出:空格 tabstabs

仅删除空格:

echo $'spaces tabs\ttabs' | tr -d ' '

输出:spacetabs tabs

© www.soinside.com 2019 - 2024. All rights reserved.