특정 문자열을 찾기 위해 grep하는 방법은 무엇입니까?

특정 문자열을 찾기 위해 grep하는 방법은 무엇입니까?

다음 패턴과 일치하는 문자열을 얻으려고 합니다. 로 시작 foo하고 으로 끝납니다 bar.

grep -e "^foo*bar$"

답변1

일치시키려는 패턴은 세 부분으로 나뉩니다.

  • 첫 번째는 "foo"로 문자열을 시작하는 것입니다. 따라서 시작 앵커 '^foo'를 사용하십시오.
  • 두 번째는 문자열을 "bar"로 끝냅니다. 여기에서는 종료 앵커 'bar$'를 사용합니다.
  • 세 번째 부분은 시작 앵커 포인트와 끝 앵커 포인트 사이의 콘텐츠입니다. 귀하의 경우 모든 문자를 0번 이상 일치시키려고 합니다(즉, 사이에 문자가 있을 수도 있고 없을 수도 있습니다). 이는 ".*"라는 표현으로 표시됩니다. 점은 모든 문자와 일치하며 별표 수량자는 0번 이상 일치할 수 있음을 지정합니다.

이것을 모두 합치면 다음과 같은 표현이 나옵니다.

grep '^foo.*bar$' file

예를 들어 다음 테스트 파일을 고려해보세요.

$ cat testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123
123 foo bar 123

이제 grep다음 명령을 실행하십시오.

$ grep '^foo.*bar$' testfile
foobar
foo bar
foo 123 bar

grep -e "^foo" -e "bar$" file주석( )에 지정한 변형 은 다르게 동작합니다.

$ grep -e "^foo" -e "bar$" testfile
foobar
foo bar
foo 123 bar
123 foo bar
foo bar 123

-e이는 OR 연산을 사용하여 옵션을 결합하기 때문입니다 . 원래 결과 외에도 결과 일치 및 결과 일치도 ^foo.*bar$얻을 수 있습니다 .^foobar$

관련 정보