sed 또는 awk를 사용하는 "grep | cut"과 동등한 것은 무엇입니까?

sed 또는 awk를 사용하는 "grep | cut"과 동등한 것은 무엇입니까?

구성 파일이 있다고 가정 해 보겠습니다./etc/emails.conf

email1 = [email protected] 
email2 = [email protected]
email3 = [email protected]

이메일을 받고 싶어요 2

나는 다음을 할 수 있다:

grep email2 /etc/emails.conf | cut -d'=' -f2 

email2를 얻으십시오. 그러나 sed 또는 awk 명령을 사용하여 "더 멋지게" 수행하고 cut 명령으로 남겨진 공백을 제거하는 방법은 무엇입니까?

답변1

awk를 사용하는 것은 어떻습니까?

awk -F = '/email2/ { print $2}' /etc/emails.conf
  • -F =필드는 "="로 구분됩니다.

  • '/email2/ { print $2}'"email2"와 일치하는 줄에서 두 번째 필드를 인쇄합니다.

답변2

이것정밀한이에 상응하는 내용은 다음과 같습니다.

sed -n '/email2/{s/^[^=]*=\([^=]*\).*/\1/;p;}' < file

하지만 다음을 원할 수도 있습니다.

sed -n 's/^[^=]*email2[^=]*=[[:blank:]]*//p' < file

(즉, email2첫 번째 앞 부분만 일치하고 두 번째 앞 부분( 있는 경우) 뿐만 아니라 =첫 번째 오른쪽(앞 공백 건너뛰기)에 있는 모든 항목을 반환합니다 .==

답변3

perl -nlE 's/email2\s*=\s*// and say'    file

어디:

  • perl -nl 한 줄씩 하는 건지...
  • s/email2 = // 가능하다면 검색된 이메일 ID를 삭제하세요...
  • say현재 입력된 입력 줄을 인쇄합니다.
  • \s*0개 이상의 공백([ \t\n]*과 동일)

답변4

필드 구분 기호를 "="와 같은 특수 값으로 설정할 필요가 없습니다. 기본적으로 AWK는 건너뛰는 연속 공백과 탭을 필드 구분 기호로 사용하므로 파일의 각 줄에 세 번째 필드 공간에 선행 문자가 없는 세 개의 필드가 있는 것으로 해석됩니다.

awk '/^email2/ { print $3 }'

생산하다

[email protected]

위의 내용은 로 시작하는 모든 줄과도 일치합니다 email2. email20예를 들어 사용할 수 있습니다.

awk '$1 == "email2" { print $3 }'

관련 정보