2

パイプファイルを cat し、いくつかのデータを grep するようなコマンドを使用します。次のような単純なコード

temp=""
temp=$(cat file|grep "some data"| wc -c)
if [ $temp -gt 0 ]
then
    echo "I got data"
fi

ファイルはパイプ(FIFO)で、データを出力し、停止しません。有限時間内に猫パイプのコマンドを終了するにはどうすればよいですか?

4

5 に答える 5

0

grep|wcこの仕事には不適切なツールです。sedなど、より良いものを選択してください。

if sed -n -e '/some data/q;$q1' file; then
    ....
fi

awk

found=$(awk '/some data/{print"y";exit}' file)
if [ -n "$found" ]; then
    ....
fi

またはshそれ自体。

found=
while read line; do
    if expr "$line" : ".*some data" >/dev/null; then
        found=y
        break
    fi
done <file
if [ -n "$found" ]; then 
    ....
fi
于 2012-09-25T18:02:36.677 に答える
0

3 行目の temp 変数に $ を追加しました。

if [ $temp -gt 0 ]

一時値を比較したいので、変数の前に $ を使用して取得します。

ファイル "pipe" については、特定の文字列を取得するまで cat を実行できます。つまり、読み取りには cat を使用し、たとえば "\n" を受け取ったら停止できます。

端末で実行できる例を示します。

cat > example_file.txt << EOF
hello
I'm a example filen
EOF

cat は、「EOF」を入力するまで標準入力から読み取ります。そして、ファイルの内容は次のようになります。

cat example_file.txt 
hello
I'm an example file

このようにして、行などのチャンクで読み取ることができます。

于 2012-09-25T17:18:40.167 に答える
0

それ自体の終了ステータスを確認するだけgrepです:

if grep -q "some data" file; then
    echo "I got data"
fi

-q、一致が見つかった場合に標準出力に何も書き込まれないようにします。

于 2012-09-26T01:48:29.277 に答える