0

テキストの行が異なるファイルがあります。同じパターンの重複があるかどうかを確認したいと思います。

ファイル内:

Blah
Blah
Depends: ssloader, firmware (>= 3.0), firmware (<= 6.0), apta
blah

私の目的は、">= 3.0" & "<= 6.0" をファイルに入れることです。ただし、「ファームウェア」の依存関係が 1 つしかない場合があることに注意してください。

私がこれまでに持っているものは、最初のファームウェア情報のみを取得します:

if grep -Fq "firmware (" inputfile #checks if pattern exists
then
 compat=$(look 'Depends:' inputfile) #grab line where pattern is
 compat=${##*firmware (} #remove pattern and other stuff infront
 compat=${compat%%)*} #remove other stuff behind ")"
 echo $compat >> outputfile
fi

同じ行に複数のパターンがあるかどうかを確認する方法を知りたいです。または、同じパターンの行が複数ある場合、その行を特定する方法でファームウェアの値を取得できます。ありがとう

編集:

私の最初の意図は、同じパターンが複数あるかどうかを検出することです。私はアイデアを受け入れます。:)

このようなもの:

if (more than one of same pattern)
 get both values #I am open to ideas to get this done <---
else
 get value of this pattern
fi

EDIT2:

私はこのようにすることでこれを機能させました。

if grep -Fq "firmware (" ./control
then
    compat=$(look 'Depends:' control)
    compat=${compat#*firmware (}
    compat=${compat%%)*}
    echo -n $compat > ./compatibility.txt
    if [ $(grep -o "firmware (" ./control | wc -l) -eq 2 ]; then

    compat=$(look 'Depends:' control)
    compat=${compat##*firmware (}
    compat=${compat%%)*}
    echo " $compat" >> ./compatibility.txt
    fi
fi

私はそれが間違いなく非常に素人であることを知っており、パターンが "Depends:" ラベルにある場合にのみ機能します。

アイデア/インプットはありますか?

4

2 に答える 2

1

使用しても大丈夫な場合sed

sed -n '/firmware (/ { s/[^(]*(\(\([<>]=\|=\|[<>]\)\s\+[0-9]\+\(\.[0-9]\+\)*\))[^(]*/\1 /g; p }' file

サンプル入力:

Blah
Blah
Depends: ssloader, firmware (>= 3.0), firmware (<= 6.0), firmware (= 5.0), apta
Depends: ssloader, firmware (>= 3.0), firmware (<= 6.0), apta
Depends: ssloader, firmware (<= 6.0), apta
blah

サンプル出力:

>= 3.0 <= 6.0 = 5.0 
>= 3.0 <= 6.0 
<= 6.0
于 2012-04-27T04:03:56.757 に答える
1

sedあなたがしていることに応じて、よりうまくいくかもしれない別のバージョン:

sed -n 's/.* firmware (\([^)]*\)),.* firmware (\([^)]*\)),.*$/\1 \2/p'

(ちなみに、これを複数のパッケージに一般化するのは比較的簡単です。)

于 2012-04-27T04:11:29.207 に答える