다른 명령과 함께 사용할 때 여러 문자열을 파악하는 방법은 무엇입니까?

다른 명령과 함께 사용할 때 여러 문자열을 파악하는 방법은 무엇입니까?

다음을 사용하는 방법을 알아내려고 합니다.

grep -i

다른 명령에서 grep을 사용한 후 여러 문자열을 사용합니다. 예를 들어:

last | grep -i abc
last | grep -i uyx

위의 내용을 하나의 명령으로 결합하고 싶지만 인터넷에서 검색하면 grep이 명령이 아닌 파일과 함께 사용될 때 grep에서 여러 문자열을 사용하는 방법에 대한 참조만 찾을 수 있습니다. 나는 다음과 같은 것을 시도했습니다 :

last | grep -i (abc|uyx)

또는

last | grep -i 'abc|uyx'

그러나 이것은 작동하지 않습니다. 원하는 결과를 얻기 위한 올바른 구문은 무엇입니까?

미리 감사드립니다.

답변1

grep표준 옵션부터 시작하여 다양한 옵션을 개별적으로 사용할 수 있습니다.

grep -i -e abc -e uyx
grep -i 'abc
uyx'
grep -i -E 'abc|uyx'

일부 grep구현을 사용하면 다음을 수행할 수도 있습니다.

grep -i -P 'abc|uyx' # perl-like regexps, sometimes also with
                     # --perl-regexp or -X perl
grep -i -X 'abc|uyx' # augmented regexps (with ast-open grep) also with
                     # --augmented-regexp
grep -i -K 'abc|uyx' # ksh regexps (with ast-open grep) also with
                     # --ksh-regexp
grep -i 'abc\|uyx'   # with the \| extension to basic regexps supported by
                     # some grep implementations. BREs are the
                     # default but with some grep implementations, you
                     # can make it explicit with -G, --basic-regexp or
                     # -X basic

(...)주위에 s를 추가 할 수 있지만 abc|uyx( \(...\)BRE의 경우) 필수는 아닙니다. s ()s 등도 쉘 언어 구문에서 특수 문자이므로 |문자 그대로 전달하려면 따옴표를 묶어야 합니다 .grep

grep일부 구현(비표준) 에서는 정규식 구문의 일부로 대소문자를 구분하지 않는 일치를 활성화할 수도 있습니다 .

grep -P '(?i)abc|uyx' # wherever -P / --perl-regexp / -X perl is supported
grep -K '~(i)abc|uyx' # ast-open grep only
grep -E '(?i)abc|uyx' # ast-open grep only
grep '\(?i\)abc|uyx'  # ast-open grep only which makes it non-POSIX-compliant

이는 표준 옵션 -i에 비해 실제로 큰 이점을 제공하지 않습니다 . 예를 들어, abc대소문자를 구분하지 않고 대소문자를 구분하여 일치시키려는 경우(더 흥미로울 수 있음) uyx다음을 수행할 수 있습니다.

grep -P 'abc|(?i)uyx'

또는:

grep -P 'abc|(?i:uyx)'

(및 정규식 구문의 기타 동등한 변형).

동등한 표준은 다음과 같습니다.

grep -e abc -e '[uU][yY][xX]'

(대소문자를 구분하지 않는 일치는 일반적으로 로케일에 따라 달라집니다. 예를 들어 대문자인지 로케일에 따라 달라질 수 있는지 i여부 ).Iİgrep -i i

답변2

grep 'abc\|uyx'
egrep 'abc|uyx'

관련 정보