1

ファイルからサイズ (kb) を抽出しようとしています。次のようにしようとしています:

textA=$(du a)
sizeA=$(expr match "$textA" '\(^[^\s]*\)')
textB=$(du b)
sizeB=$(expr match "$textB" '\(^[^\s]*\)')

echo $textA
echo $sizeA
echo $textB
echo $sizeB

[[ $sizeA == $sizeB ]] && echo "eq"

しかし、これはコンソールの textA と textB に出力されるだけです。どちらも次のようなものです:

30745 a

正規表現が一致しない理由を誰か説明してもらえますか? 念のため、多くのサイトでテキストに対して正規表現をテストしようとしましたが、正しいテキストをキャプチャしているようです。

私もそれを次のように変更しようとしました:

'^\([^\s]*\)'

しかし、この方法ではすべてのテキストがキャプチャされます。何かご意見は?

4

4 に答える 4

3

直接的な回答ではありませんが、私は次のようにします。

 sizeA=$(du a | awk '{print $1}')
于 2013-08-02T09:00:15.037 に答える
3

私は、または他の拡張正規表現expr matchを理解していません。代わりに\s試してください。'\([0-9]*\)'

しかし、他の人がすでに述べたように、「最初の単語」を取得するために正規表現を使用するのは少しやり過ぎです。を使用しますが、 を使用してバージョンまたはソリューションをdu s | { read a b; echo $a; }使用することもできます。awkcut

于 2013-08-02T09:08:20.937 に答える
2

の出力を解析しないでくださいdu。利用可能な場合は、たとえばstatファイルのサイズをバイト単位で取得するために使用できます。

sizeA=$(stat -c%s "${fileA}")
于 2013-08-02T09:02:17.643 に答える