0

このsedコマンドの説明は次のとおりです。

10,000ドル以上の車を削除します。sortこれを行うには、の出力をaにパイプしsedます。これを行うには、レコードの最後で5桁(またはそれ以上)の数字を表す正規表現に一致するとすぐに終了します(これに繰り返しを使用しないでください)。

これまでのところ、コマンドは次のとおりです。

$ grep -iv chevy cars | sort -nk 5

そのコマンドの最後に別のパイプを追加する必要があります。これは、「レコードの最後で5桁以上を表す正規表現に一致するとすぐに終了する」と思います。

私は次のようなことを試みました

$ grep -iv chevy cars | sort -nk 5 | sed "/[0-9][0-9][0-9][0-9][0-9]/ q" 

と他のバリエーションがありますが//、何も機能しません!5桁以上を表す正規表現に一致し、この質問に従って終了するコマンドは何ですか?

4

3 に答える 3

4

通常、レコードの最後の 5 桁に一致するよう$に、秒の前にa を追加する必要があります。/を省略する$と、5 桁の任意のシーケンスでsed終了するため、価格の前に別の番号 (おそらく VIN) があると、意図しないときに一致する可能性があります。

grep -iv chevy cars | sort -nk 5 | sed '/[0-9][0-9][0-9][0-9][0-9]$/q'

全体として、正規表現にシェル変数を代入する必要がない限り (または正規表現自体に一重引用符が含まれていない限り)、正規表現を一重引用符で囲む方が安全です。繰り返しを指定することもできます:

grep -iv chevy cars | sort -nk 5 | sed '/[0-9]\{5,\}$/q'

\{5,\}5 桁以上の部分に一致します。なんらかの理由でそれが機能しない場合は、GNU を使用していることに気付く可能性があり、通常モードで機能させるためにsed何かを行う必要があります。sed --posixまたは、バックスラッシュを削除することもできます。sedGNUには、使用する正規表現メカニズムを変更するためのオプションが確かにあります(GNU にgrepもあるように)。

于 2012-11-26T21:27:24.410 に答える