gmail
단어 나 카테고리를 찾고 있어요 outlook
. 일부 행은 주석 처리되어 gmail
있습니다 outlook
. 나는 무엇을 grep
해야 합니까?
나는 많은 것을 시도했지만 다음과 같을 것이라고 생각했습니다.
grep "^[^#;]" | egrep -i "gmail|outlook" *.ksh > a.log
답변1
그리고 grep
:
grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' file
-P
Perl 호환 정규식을 활성화합니다.^(?=...)
패턴의 일부가 아닌 캡처링 그룹(미리보기, Perl 확장)을 정의합니다. 이는^
줄의 시작을 의미합니다.- 이 그룹은 내부적으로
\s
모든 공백 문자와 일치하고 ,*+
공백과 0회 이상 일치하며, 탐욕적입니다(Perl 확장자). [^#]
일치하지 않는 모든 항목과 일치합니다#
.
- 이 그룹은 내부적으로
[^#]*
캡처 그룹 외부에서#
0번 이상 존재하지 않는 문자를 다시 일치시킵니다.(gmail|outlook)
마지막 경기gmail
또는outlook
다양한 예제를 사용하여 테스트 파일을 만들었습니다.
$ cat file
# outlook
blah gmail # this should match
# gmail
# gmail
# foo
blah outlook # this should match
outlook blah # gmail - this should match
foobar # gmail
bar
another gmail # this should match
출력은 다음과 같습니다
blah gmail # this should match
blah outlook # this should match
outlook blah # gmail - this should match
another gmail # this should match
물론 *.ksh
모든 파일에 대해 이 명령을 실행할 수 있습니다.
grep -P '^(?=[\s]*+[^#])[^#]*(gmail|outlook)' *.ksh > a.log
답변2
따라서 .ksh
해당 문자열에 대해 현재 디렉터리의 모든 파일을 검색 하고 . 로 시작하는 줄을 제외 gmail
하고 출력을 .outlook
#
a.log
좋아요grep -P "^(?=[^#])(.*gmail.*|.*outlook.*)" *.ksh > a.log
답변3
사용하는 방법:
egrep "gmail|outlook" *.ksh | grep -v ^[#]
먼저 grep
"gmail" 또는 "outlook"이 포함된 모든 줄을 가져오고, 두 번째는 grep
주석 줄을 무시합니다.