다음을 포함하는 줄을 찾고 싶습니다.
- 0 amount
- 122,000,000 amount
- 50,000 amount
나는 사용해 보았습니다.
grep -rhI " - * amount ".
하지만 다음을 포함하는 것은 무엇이든 출력됩니다.
-
포함되어 있는지 여부
amount
문제는 내가 문자열 만 원한다는 것입니다
- * amount
이는 *
그 사이의 모든 것을 의미합니다 - (here) amount
. "-"만 포함된 행이 무시되는 경우 허용됩니다.
그러나 이것은 작동하지 않습니다.
답변1
*
0개 이상과 일치합니다 .선행 문자또는 패턴.
이는 - * amount
일치한다는 의미입니다.
- amount
- amount
- amount
- (등.)
작성한 숫자를 일치시키려면 - [0-9,]+ amount
as 패턴을 사용하세요. +
최소한 앞의 정규식과 일치하도록 강제하고 모든 [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
-e
grep
-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/*
이는 [^ ]*
공백을 제외한 모든 문자와 일치한다는 의미입니다.