控制台命令结果作为 sed 或其他命令的输入文件

控制台命令结果作为 sed 或其他命令的输入文件

一些命令将文件作为输入,有没有办法将命令的结果视为文件?

例如我想获取两个字符串之间的一个字符串:

sed -n "/START-WORD-HERE/,/END-WORD-HERE/p" input

但是我想使用一个生成大量文本作为输入的命令,例如“cat somefile”,我尝试用$(cat somefile) 替换输入,但 sed 对 cat 命令返回的每个单词都返回了错误......

答案1

是的,这就是 Linux 哲学的核心“许多小工具组成一个更大的进程”

Linux 使用一种叫做命令行管道的东西。

要使用它们,只需使用竖线字符将两个命令连接在一起

|

因此,就您而言,您想将 cat 命令的输出发送到 sed 命令,您可以按如下方式执行此操作

cat somefile | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

请注意,在这种情况下您不再在命令后指定文件名。

99% 的 Linux 命令都允许你使用管道进行操作,但一定要阅读其中一些命令的手册页,因为其中很多命令仍然需要你指定要使用的文件名,但通常会告诉你使用

-

(减号字符)

代替文件名。

还要记住,在大多数情况下,管道是线性的,一端的输出形成另一端的输入,并承载沿链执行的任何转换。

这意味着,例如,如果你

cat somefile | grep someword | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

sed 的输入仅是 grep 对 cat 的输入执行的任何操作的输出。

最好先用文件的副本进行测试/试验,直到您知道一切正确为止,并且不要害怕一步一步地开发事情。

获取

cat blah | grep bleah

在添加 sed 位之前,确保位正确。然后在添加 awk/wc/ 或其他位之前确保 sed 位正确,一步一步地观察输出将允许您在进行过程中调试和验证管道。

有许多命令可以完成许多不同的工作,花一个晚上阅读几页 Linux 命令行工具手册是一个很好的借口。有工具可以从文件中剪切列、将 word 文档转换为文本、计算行数等等。

然后,一旦您对此感到厌倦,这里有一个链接,指向我很久以前为 PHP Builder 撰写的一篇文章,向您展示如何用 PHP 编写自己的管道处理器。

https://phpbuilder.com/php-and-shell-scripting-using-pipes/

最重要的是玩得开心,你可以用很少的工具做一些令人惊奇的事情。

相关内容