구성 파일이 있다고 가정 해 보겠습니다./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 }'