传递sed输出,就像它的文件一样

时间:2014-12-02 17:28:04

标签: linux bash sed

我有ruby脚本,它接收配置文件的名称作为参数。 我需要在循环中运行它,在每次迭代时更改配置内的一些参数。

sed一切正常,但我不知道如何将sed的脚本输出传递给ruby,以便ruby会认为它是文件?有可能吗?

代码可能更清晰:

这就是通常推出的方式:

ruby script.rb config.conf

我想要的是:

sed 's/one_param/another_param/' config.conf | ruby script.rb ???????

我应该放什么让ruby脚本认为它收到的文件内容为sed的输出? 我想到了将临时文件保存为sed的输出然后将文件传递给script.rb的解决方法,但我确定有更好的方法来实现它

2 个答案:

答案 0 :(得分:2)

有关如何使用流程替换的信息,请参阅this answer

简而言之:

cat <( echo "yo")

或者在你的情况下:

ruby script.rb <(sed 's/one_param/another_param/' config.conf)

要创建流程替换,请将命令与<(...)括起来,如:<(COMMAND)

检查http://mywiki.wooledge.org/ProcessSubstitution

答案 1 :(得分:0)

传统上,UNIX程序接受-作为文件名来表示“从标准输入读取”:

echo foo | wc -

这是一项基本适用于所有地方的惯例。

然而,不了解Unix的脚本编写者可能不会想到实现这一点。这是一个应由他们修复的错误,但您可以使用/dev/stdin来解决此问题:

echo foo | wc /dev/stdin

在您的示例中,这将是

之一
sed 's/one_param/another_param/' config.conf | ruby script.rb -
sed 's/one_param/another_param/' config.conf | ruby script.rb /dev/stdin