我正在编写一个 csh 脚本,它将从文件 xyz 中提取一行。xyz 文件包含一个编号。代码行数和我感兴趣的行出现在文件的 2-3 行之后。我尝试了以下代码
set product1 = `grep -e '<product_version_info.*/>' xyz`
我希望它采用某种方式,以便当脚本找到该行时,它应该将该行作为字符串保存在某个变量中并立即终止读取文件,即。在提取该行之后,它不应再阅读。
请帮忙 !!
grep有一个-m
or--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.*/>'`
我认为您要求返回文件中的第一个匹配行。grep
如果是这样,一种解决方案是将结果通过管道传输到head
set product1 = `grep -e '<product_version_info.*/>' xyz | head -1`