BASH "Grep OR/Grep AND/Grep NOT" 연산자 사용

BASH "Grep OR/Grep AND/Grep NOT" 연산자 사용

예를 들어 다음과 같이 grep을 사용하여 부분 검색을 수행할 수 있다는 것을 알고 있습니다.

echo "Enter example"
read example

echo "Enter Subject"
read subject
grep -i ^$example info.txt | grep -i ^[^,]*:$subject 

출력은 문자열을 포함하는 모든 행이 될 것입니다. "example"을 입력하면 "example"이라는 문자열이 포함된 모든 행이 표시됩니다.

사용자가 info.txt의 사용 가능한 읽기 자료 목록에서 일반 검색을 수행할 수 있도록 이 기능이 필요합니다.

현재 if 문을 사용하고 있습니다. $example과 $subject에 모두 정보가 있으면 리터럴 문자열 일치 문자열과 같은 특정 검색을 수행하고, 그렇지 않으면 false를 반환합니다.

info.txt에 많은 예가 있는 것처럼 검색을 보다 유연하게 만들거나 검색을 구체적으로 만들 수 있는 방법이 있습니까?

  1. 예 1: 기초 수학
  2. 예 2: 고급 수학
  3. 예시 3: 좋은 예시를 만드는 방법은 무엇입니까?

따라서 "example"과 "math"를 입력하면 false가 반환됩니다. 그러나 "예제 1"과 "기본 수학"을 입력하면 출력이 에코됩니다. 주변에 물어보니 대부분의 친구들이 awk를 사용하라고 추천했지만, 그렇게 한다면 대부분의 검색 기능에서 grep을 사용하기 때문에 전체 스크립트를 다시 실행해야 할 것입니다.

그 당시 선생님은 grep만 가르쳐주셔서 awk는 모르고 기본적인 grep만 배웠습니다.

답변1

여기에 예제를 보여주는 shellhacks.com의 멋진 작은 페이지가 있습니다."BASH "Grep OR/Grep AND/Grep NOT" 연산자 사용",그리고그것은 sed& awk등가물을 가지고 있습니다. 여기에 붙여넣을 테니 $subject어떤 순서로든 및/또는/않고 검색하는 데 사용할 수 있습니다 .$example

BASH "Grep OR/Grep AND/Grep NOT" 연산자 사용

다음 문서에서는 Linux GREP/SED/AWK 명령에서 OR/AND/NOT 연산자를 사용하는 방법을 보여주는 몇 가지 예를 찾을 수 있습니다.

이와 같은 것을 사용하는 것은 매우 일반적인 작업입니다.Linux 명령줄 도구grep, sed 및 awk로정규식을 사용하여 파일 구문 분석.

나는 방법을 보여줄 것이다모든 행 찾기, 저것다양한 모드가 포함되어 있습니다., 파일의 모든 줄을 인쇄하는 방법, 즉여러 패턴 일치모든 줄을 찾아 인쇄하는 방법일치하는 패턴이 없습니다.

Grep 'OR' 연산자

다음 패턴 중 하나와 일치하는 파일의 모든 행을 찾으십시오.

GREP 명령을 사용하십시오.

grep "pattern1\|pattern2" file.txt
grep -E "pattern1|pattern2" file.txt
grep -e pattern1 -e pattern2 file.txt
egrep "pattern1|pattern2" file.txt

AWK 명령을 사용하십시오.

awk '/pattern1|pattern2/' file.txt

SED 명령을 사용하십시오.

sed -e '/pattern1/b' -e '/pattern2/b' -e d file.txt

Grep 'AND' 연산자

여러 패턴과 일치하는 파일의 모든 줄을 찾아 인쇄합니다.

GREP 명령을 사용하십시오.

grep -E 'pattern1.*pattern2' file.txt # in that order
grep -E 'pattern1.*pattern2|pattern2.*pattern1' file.txt # in any order
grep 'pattern1' file.txt | grep 'pattern2' # in any order

AWK 명령을 사용하십시오.

awk '/pattern1.*pattern2/' file.txt # in that order
awk '/pattern1/ && /pattern2/' file.txt # in any order

SED 명령을 사용하십시오.

sed '/pattern1.*pattern2/!d' file.txt # in that order
sed '/pattern1/!d; /pattern2/!d' file.txt # in any order

Grep 'NOT' 연산자

패턴과 일치하지 않는 모든 줄을 찾아 인쇄합니다.

GREP 명령을 사용하십시오.

grep -v 'pattern1' file.txt

AWK 명령을 사용하십시오.

awk '!/pattern1/' file.txt

SED 명령을 사용하십시오.

sed -n '/pattern1/!p' file.txt

이것은 링크입니다GNU Grep 매뉴얼. 포함한 좋은 정보가 많이 있습니다.일반적인 표현좀 남았어사용예.

이 페이지는정규식에 대한 "치트 시트".

관련 정보