0

ファイル xyz から行を抽出する csh スクリプトを作成しています。xyz ファイルには no が含まれています。コードの行数と、関心のある行がファイルの 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その場合、1 つの解決策は、結果をパイプすることです。head

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