-w 옵션을 사용하여 두 가지를 어떻게 grep할 수 있나요?

-w 옵션을 사용하여 두 가지를 어떻게 grep할 수 있나요?

나는JSON배열에 있는 두 항목의 값을 가져오는 데 사용하려는 파일입니다 grep. foo값에서 데이터를 가져오려고 하는데 bar문제는 값 bar도 일치 하므로 megabaroption 으로 grep해야 한다는 것입니다 -w. 값을 주문
해야 하기 때문에 둘 다 찾으려고 할 때 문제가 발생합니다.grep또는또 다른.
~에서이것문제는 내가 찾고 있는 것에 더 가까워졌지만 결과는 다음과 같습니다.

grep -E '(foo|-w bar)' file
 "foo": "59766",
 "foo": "59770",
 "foo": "59774",
 "foo": "59778",
 "foo": "59782",
 "foo": "59786",

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변1

이것단어 경계와 비슷한 효과가 있지만 -w표현식의 일부로 사용될 수 있습니다.

'\b'는
단어 가장자리의 빈 문자열과 일치합니다.
[...]
'\<'는
단어 시작 부분의 빈 문자열과 일치합니다.
'\>'는
단어 끝의 빈 문자열과 일치합니다.

bar전체 단어인 경우에만 일치하지만 foo어디에서나 일치합니다(긴 단어 내부 포함).

grep -E 'foo|\<bar\>'

답변2

foo가 foo와 동일한 맥락에서 사용되고 전체 단어와도 일치한다는 점을 고려하면 가장 간단한 방법은 다음과 같습니다.

grep -E -w '(foo|bar)' file

관련 정보