0

我正在编写一个 csh 脚本,它将从文件 xyz 中提取一行。xyz 文件包含一个编号。代码行数和我感兴趣的行出现在文件的 2-3 行之后。我尝试了以下代码

set product1 = `grep -e '<product_version_info.*/>' xyz`

我希望它采用某种方式,以便当脚本找到该行时,它应该将该行作为字符串保存在某个变量中并立即终止读取文件,即。在提取该行之后,它不应再阅读。

请帮忙 !!

4

2 回答 2

2

grep有一个-mor--max-count标志,告诉它在指定数量的匹配后停止。希望您的 grep 版本支持它。

set product1 = `grep -m 1 -e '<product_version_info.*/>' xyz`

从上面链接的手册页:

-m NUM, --max-count=NUM

    Stop reading a file after NUM matching lines.  If the  input  is
    standard  input  from a regular file, and NUM matching lines are
    output, grep ensures that the standard input  is  positioned  to
    just  after the last matching line before exiting, regardless of
    the presence of trailing context lines.  This enables a  calling
    process  to resume a search.  When grep stops after NUM matching
    lines, it outputs any trailing context lines.  When  the  -c  or
    --count  option  is  also  used,  grep  does  not output a count
    greater than NUM.  When the -v or --invert-match option is  also
    used, grep stops after outputting NUM non-matching lines.

作为替代方案,您始终可以使用下面的命令来检查前几行(因为它总是出现在前 2-3 行中):

set product1 = `head -3 xyz | grep -e '<product_version_info.*/>'`
于 2013-01-25T17:16:22.403 回答
0

我认为您要求返回文件中的第一个匹配行。grep如果是这样,一种解决方案是将结果通过管道传输到head

set product1 = `grep -e '<product_version_info.*/>' xyz | head -1`
于 2013-01-25T17:10:49.790 回答