2016-03-10 89 views
0

我正在练习在Mac OSX中使用终端。为什么grep在这种情况下不能返回整行?

我去/dev/文件夹从根,想查找包含null行了,所以我也ls获得该文件夹的内容。有很多,所以我认为这是一个使用grep的机会。因此,我输入ls | grep "null",并简单地返回null而不是全行null ttyp9,如正常ls列表中所示。

这是怎么发生的?我以为grep返回完整的行?

+1

为什么'ls'或'grep',只是使用'printf'%s \ n“* null *' – anubhava

+1

仅供参考,[解析ls的输出通常被认为是不好的](http://mywiki.wooledge.org/ParsingLs)。另见:http://askubuntu.com/questions/578242/how-to-combine-ls-and-grep-to-list-only-files-and-using-ls-to-count-dirs当然,如果你只是在学习这是一个很好的练习方式,因为你可以遇到所有奇怪的情况:) – whrrgarbl

+0

@whrrgarbl是的,只是学习。感谢那些链接 –

回答

1

ttyp9不同文件。

ls显示的是输出列。

当没有发送到终端ls不这样做,并行为就像你使用-1参数。

+0

因此'grep'不会返回行,因为它们与输出一起显示(在本例中是带有'ls'的文本列),但是以某种线性方式显示?或者说,列的东西是'ls'之外的东西? –

+0

不,“grep”确实会返回它获得的行。虽然你得到的行和'grep'得到的行不同。运行'ls -1',你会看到'grep'正在看什么。 –

+1

当向终端显示时,列输出是“ls”所做的事情,使*人*更容易一次查看多个文件。它还“知道”其他工具无法处理(并且不应该)),因此它在输出是终端并且输出不是终端的情况下默认*为不同的行为。查看'ls'和'ls |之间的区别猫'为例。 –

1

grep确实会返回全行。 ls命令本身并未提供详细信息。试试这个:

ls -l | grep "null" 

,清单标志给出更多细节,grep的可以再回来。

换句话说,grep正在做你想做的事,没有什么可以看到的。

没有选项的ls命令将只显示文件名。通常,返回的文件名列表被包装。你可以解开他们,如果你键入:

ls -1 

如果你看一下这个清单中,你会看到,null实际上是一行全部由自己。

如果添加long listing选项:

ls -l 

你会看到更多的细节。 grep命令只能返回给它的内容,在这种情况下,ls是为grep提供所有输入的内容。

+1

不是他正在寻找的细节。 –

相关问题