2016-11-27 10 views
1

私はsedに、テキスト行に表示される最初の数字を出力しようとしています。標準入力からの入力を取る、それは数に達するまでの文字の束をスキップし、一致しているの1つの以上の文字をキャプチャするsedを教えてくださいなぜsedはこの置換の結果を8と評価しますか?

sed 's/.*\([0-9]\+\).*/\1/g' 

を私の理解には、:ここで私が使用しているコマンドがあります行の残りの文字をスキップします。しかし、私はそれを介してパイプに何かしようとすると、これはホールドアップしません:

[email protected] MINGW64 ~/Code/git/corefx (sparse-array-builder) 
$ tasklist | grep VBCSCompiler 
VBCSCompiler.exe    11080 Console     33 155,944 K 

[email protected] MINGW64 ~/Code/git/corefx (sparse-array-builder) 
$ tasklist | grep VBCSCompiler | sed 's/.*\([0-9]\+\).*/\1/g' 
8 

私は2番目のコマンドの出力は11080ことが期待が、それは8です。 8が入力の最初の数字でも最後の数字でもなく、一揃いの文字と一緒にグループ化されているので、なぜこれが起こりますか?また、ここで正しいregexpは何でしょうか?

ありがとうございます。

答えて

2

正規表現の最初の部分はできるだけ貪欲に一致し、文字の最後の桁である一致の次の部分を可能な限り残します。この桁はメモリの一部ですパイプラインの異なる実行間で変更することができます。あなたは任意の数字以外の文字にマッチする正規表現の最初の部分を設定した場合

、それはあなたがしたい番号を選ぶだろう:私は、これはそれがない:)答えたときには遅かった

tasklist | grep VBCSCompiler | sed 's/[^0-9]*\([0-9]\+\).*/\1/' 
+0

結果に差をつけてください、とにかく私は更新します。 –

関連する問題