파일이 있습니다. 100-500 사이의 숫자가 있는 모든 줄을 인쇄하려면 grep을 사용해야 합니다.

파일이 있습니다. 100-500 사이의 숫자가 있는 모든 줄을 인쇄하려면 grep을 사용해야 합니다.

아래 예에서 수량은 "38"이라는 필드입니다(예: 첫 번째 행의 38=842).

Order:167342,9=205|21=1|553=2453|49=11342|56=MBT|10=085|55=/GCQ3|1=30532|114=Y|40=1|35=D|54=|60=20130624-09:45:02.046|34=388|11=|38=842|52=20130624-09:45:02.046|59=0|100=MBTX|43=Y|8=FIX.4.4|

Order:544291,52=20130624-09:45:02.046|59=0|100=MBTX|43=Y|8=FIX.4.4|54=|60=20130624-09:45:02.046|40=1|35=D|34=388|11=|38=952|56=MBT|1=30532|114=Y|10=085|55=/GCQ3|9=205|21=1|553=2453|49=11342|

Order:916070,35=D|40=1|54=|60=20130624-09:45:02.046|38=234|34=388|11=|59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|9=205|553=2453|49=11342|21=1|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|

Order:332907,9=205|49=11342|553=2453|21=1|56=MBT|114=Y|1=30532|55=/GCQ3|10=085|60=20130624-09:45:02.046|54=|35=D|40=1|38=26|11=|34=388|59=0|52=20130624-09:45:02.046|8=FIX.4.4|43=Y|100=MBTX|

Order:385327,38=190|34=388|11=|35=D|40=1|60=20130624-09:45:02.046|54=|8=FIX.4.4|43=Y|100=MBTX|59=0|52=20130624-09:45:02.046|553=2453|49=11342|21=1|9=205|55=/GCQ3|10=085|1=30532|114=Y|56=MBT|

Order:610550,59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|35=D|40=1|54=|60=20130624-09:45:02.046|38=521|11=|34=388|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|9=205|553=2453|49=11342|21=1|

Order:408689,59=0|52=20130624-09:45:02.046|8=FIX.4.4|43=Y|100=MBTX|35=D|40=1|60=20130624-09:45:02.046|54=|38=658|34=388|11=|56=MBT|55=/GCQ3|10=085|114=Y|1=30532|9=205|49=11342|553=2453|21=1|

Order:43899,56=MBT|10=085|55=/GCQ3|114=Y|1=30532|9=205|21=1|49=11342|553=2453|52=20130624-09:45:02.046|59=0|100=MBTX|43=Y|8=FIX.4.4|40=1|35=D|60=20130624-09:45:02.046|54=|11=|34=388|38=531|

답변1

grep에 익숙하지 않다면 Perl에서는 쉽습니다. 줄이 \ 또는 뒤에 38=과 일치하면 모든 문자는 다음 |$1까지 배치됩니다. 그런 다음 100에서 500 사이에 $1 줄을 인쇄합니다.

$ perl -ne 'if(/[\|,]38=(.*)\|/&&$1>99&&$1<501){print $_}' q
Order:916070,35=D|40=1|54=|60=20130624-09:45:02.046|38=234|34=388|11=|59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|9=205|553=2453|49=11342|21=1|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|
Order:385327,38=190|34=388|11=|35=D|40=1|60=20130624-09:45:02.046|54=|8=FIX.4.4|43=Y|100=MBTX|59=0|52=20130624-09:45:02.046|553=2453|49=11342|21=1|9=205|55=/GCQ3|10=085|1=30532|114=Y|56=MBT|
$

grep을 사용하면 (내가 아는 한) > 및 < 연산자가 없으며 38= 다음에 [1-4][0-9][0-9](100 ~ 499)가 오는 동일한 패턴을 찾습니다. 또는 500.

$ grep -E '[,|]38=([1-4][0-9][0-9]|500)\|' q
Order:916070,35=D|40=1|54=|60=20130624-09:45:02.046|38=234|34=388|11=|59=0|52=20130624-09:45:02.046|8=FIX.4.4|100=MBTX|43=Y|9=205|553=2453|49=11342|21=1|56=MBT|55=/GCQ3|10=085|1=30532|114=Y|
Order:385327,38=190|34=388|11=|35=D|40=1|60=20130624-09:45:02.046|54=|8=FIX.4.4|43=Y|100=MBTX|59=0|52=20130624-09:45:02.046|553=2453|49=11342|21=1|9=205|55=/GCQ3|10=085|1=30532|114=Y|56=MBT|
$

관련 정보