임의의 숫자로 문자열을 Grep합니다.

임의의 숫자로 문자열을 Grep합니다.

다음을 포함하는 줄을 찾고 싶습니다.

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

나는 사용해 보았습니다.

grep -rhI " - * amount ".

하지만 다음을 포함하는 것은 무엇이든 출력됩니다.

 - 

포함되어 있는지 여부

amount

문제는 내가 문자열 만 원한다는 것입니다

 - * amount

이는 *그 사이의 모든 것을 의미합니다 - (here) amount. "-"만 포함된 행이 무시되는 경우 허용됩니다.

그러나 이것은 작동하지 않습니다.

답변1

*0개 이상과 일치합니다 .선행 문자또는 패턴.

이는 - * amount일치한다는 의미입니다.

  • - amount
  • - amount
  • - amount
  • (등.)

작성한 숫자를 일치시키려면 - [0-9,]+ amountas 패턴을 사용하세요. +최소한 앞의 정규식과 일치하도록 강제하고 모든 [0-9,]숫자나 쉼표와 일치합니다.

다음 파일이 제공됩니다.

 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

 - amount
 -     amount
 - some amount

이것은 작동합니다:

$ grep -E -e '- [0-9,]+ amount' file
 - 0 amount
 - 122,000,000 amount
 - 50,000 amount

확장된 정규식 연산자이므로 필수이고, -E그렇지 않으면 패턴 의 옵션이 다음으로 해석되기 때문에 필수입니다 ( 다음 항목이 입력에 적용되는 정규식임을 의미). 아니요 . 대신 사용하세요 .+-e-grep-egrep-E\{1,\}+

패턴을 선의 시작과 끝 부분에 고정할 수도 있습니다.

$ grep -E '^ - [0-9,]+ amount$' file

즉, -e더 이상 필요하지 않으며 이전과 마찬가지로 줄이 공백으로 시작하고 대시와 숫자 등이 뒤따르는 것을 보장합니다. 문자열은 amount줄의 마지막 항목이어야 합니다(단어를 줄 끝에 고정하는 데 사용함 $).

답변2

다음과 같은 것이 작업을 수행합니다(awk 스크립트를 사용하여 첫 번째 토큰이 대시이고 세 번째 토큰이 문자열 "amount"인지 검색).

awk '$1=="-" && $3=="amount" {print $2}'

전체 줄을 인쇄하려면 다음 명령을 사용하십시오.

awk '$1=="-" && $3=="amount" {print}'

답변3

당신은 또한 사용할 수 있습니다

grep -rhI -- '- [^ ]* amount' /path/to/parent/dir/*

이는 [^ ]*공백을 제외한 모든 문자와 일치한다는 의미입니다.

관련 정보