【问题标题】:Scanning the output of a program at shell在 shell 中扫描程序的输出
【发布时间】:2013-04-25 08:28:16
【问题描述】:

您好,我目前正在尝试在 Linux 中创建一个脚本文件,该文件将 o prgram 的输出作为输入,并对其进行扫描以找出某些单词出现了多少次。为了更清楚,我想扫描输出并将某些单词在该输出中存在多少次存储到变量中。我是 linux 中的脚本新手。我尝试将输出存储在一个文件中,然后逐行扫描它以找到单词,但出于某种原因,我用来解析它的循环永远不会结束。你能帮帮我吗?

./program > buffer.txt

while read LINE
do
echo $LINE | grep word1  #when i use grep command the loop never ends
done <a.txt

编辑:在 C 中,一个等效的程序是

char* word="word1"
while(/*parse all the lines at a text */)
{
fgetline("file_a",&buffer)
if(strcmp(buffer,word)==0)
 strcpy(word1,"word") //continue the search with this 
}

【问题讨论】:

  • 您正在写入 buffer.txt 并从 a.txt 读取。对吗?
  • @dogbane 是的,这是我想出的最好的主意。但是这个脚本永远不会结束!它继续无穷大。如果我让它 echo $line 它工作正常
  • 我看不出这个循环的意义。为什么不简单地使用grep word1 a.txt 而不是循环呢?有些东西你没有给我们看。
  • @dogbane 因为我想使用 if 语句来改变我想要在第一次出现后找到的单词。

标签: linux shell output


【解决方案1】:

最简单的做法是完全跳过写入文件

if ./program | grep -q word1 &>/dev/null; then
    echo "TRUE"
fi

-q 告诉 grep 保持安静,但它仍然偶尔会产生错误消息,您可以使用 &>/dev/null 来抑制这些错误消息。如果您希望看到任何错误消息,只需删除该部分即可。 如果您希望 ./program 的错误和标准输出由 grep 分析,那么您需要将标准错误重定向到标准输出,如 this

【讨论】:

    【解决方案2】:

    您的代码运行良好, while 循环将退出。 尝试在while循环后添加以下行并验证

    echo "当循环退出时!"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2020-10-18
      • 1970-01-01
      • 2014-04-21
      • 1970-01-01
      相关资源
      最近更新 更多