0

*使用 sed 的目的是因为我想逐行读取它。

我对unix bash和ruby的问题很少,我对bash的语法真的很困惑。如果有人能给我一些例子,它真的可以帮助人们学习。欣赏每一个回应。

1.假设我想在命令行中读取 server.txt,然后按服务器内容 aplhabetally 对其进行排序

这是 server.txt 的样子

太平洋
亚洲
北美
美国

这是我输入的

sed -e server.txt |sort| > done.txt

但似乎效果不佳,如何解决?

2.我的第二个问题是如何结合使用unix命令和ruby脚本。就像我想在文件中流式传输,然后逐行输入到我的 ruby​​ 文件中。然后输出到一些文件。我试过

sed -e server.txt ruby filter.rb > done.txt

这也行不通。

3.$stdin $stdout 是什么意思?

4.如果 server.txt 像 10gb 的内存放不下,我们还能用 sort 吗?或者排序就像自动为我们做流式传输和合并?

4

1 回答 1

2
  1. 如果您输入的内容准确无误:

    sed -e server.txt |sort| > done.txt
    

    您应该因为sed抱怨“server.txt”中缺少第三个“e”而出现语法错误(因为它会将其视为尝试用“e”作为表达式分隔符来制定替代命令;该-e选项意味着以下参数是命令表达式,而不是文件名)。

    第二个管道应该省略。如前所述,您调用了一个创建文件done.txt然后什么也不做的空命令。如果您希望将输出写入文件,则需要在其中输入catortee命令。或者,更好的是,省略第二个管道以便sort写入文件。

    您能否举例说明如何使用cattee使第一个示例起作用?

    sed -e s/a/b/g server.txt | sort | cat > done.txt  # UUOC award
    sed -e s/a/b/g server.txt | sort | tee   done.txt
    sed -e s/a/b/g server.txt | sort       > done.txt  # No UUOC award
    sed -e s/a/b/g server.txt | sort      -o done.txt  # No UUOC award
    

    我已经添加了一个表达式,sed所以它会读取文件server.txtUUOC是“无用的猫”奖。绝对没有必要cat在示例中使用。如果您打算在滚动过去时读取所有 10 GiB 数据,则使用tee它可能是有意义的;否则,最后两个选项之一更明智;在这种情况下,它们本质上是等价的。

  2. 你的第二个命令:

    sed -e server.txt ruby filter.rb > done.txt
    

    应该写成:

    sed -e s/a/b/g server.txt | ruby filter.rb > done.txt
    

    我为-e选项提供了一个愚蠢的操作sed;的输出通过sed管道传输到ruby脚本,然后将输出写入done.txt. 这是一种非常标准的成语。

  3. 没有更多的上下文,我不能告诉你什么$stdin$stdout意思。在不同的语言中,它的含义略有不同,但通常是对某种变量的引用。我不确定是否有任何语言将这两个名称视为特殊名称;可能有一些,但 Perl 和 shell 对这些名称都没有特殊含义。

于 2012-09-06T03:48:14.837 回答