다음을 사용하는 방법을 알아내려고 합니다.
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'