grep은 지정된 그룹 라인과 일치하는 항목만 출력할 수 있습니까?

grep은 지정된 그룹 라인과 일치하는 항목만 출력할 수 있습니까?

일치하는 단어뿐만 아니라 전체 줄을 출력하고 싶습니다.

파일.txt

 Name   Surname   Class   Best-Lesson
1.Nick   Fras      Mat     Chemic
2.Cris   Fras      Chemic  Mat
3.Dani   Cris      Philos  Physical
4.Quar   Qand      Dani    Cris

나는 이것을 전반적으로 원한다

grep parameters Dani Chris
output: 3.Dani Cris    Philos   Physical

나는 이것을 원하지 않는다(-o 사용)

Dani Cris

답변1

OP의 의견에 따르면 이 grep은 OP가 원하는 결과를 생성할 수 있어야 합니다.

grep -iE "^[[:digit:]]\.Dani\s{0,}C[h]*ris" input.txt | xargs echo "output:"

또는 agep내 Ubuntu 시스템에 존재하지 않아 설치된 명령을 사용합니다.

agrep -1 '[0-9]\.Dani#Chris' input.txt | xargs echo "output:"

결과:

output: 3.Dani Cris Philos Physical

정보:

  • [[:digit:]]\., : 입력파일에서 [0-9]\.일부 선택3.
  • Dani\s{0,}, Dani#Chris: 이름 뒤에 공백이 있어도 tex Dani를 가져옵니다.
  • C[h]*ris: 캡처 Cris또는Chris
  • | xargs echo "Output:": xargs를 클릭하고 Output:결과 앞에 텍스트를 추가합니다.

답변2

sed, awk, grep으로도 이 작업을 수행할 수 있습니다.

방법 1 sed 사용

sed -n '/Dani/p’ example.txt | sed -n '/Dani/p’

방법 2 awk 사용

awk '$0 ~ "Dani" && $0 ~ "Cris" {print $0}’ example.txt

방법 3 grep 사용

grep 'Dani' example.txt  | grep ' Cris'

산출

3.Dani   Cris      Philos  Physical

관련 정보