문자열을 검색하고 파일에서 특정 열을 반환합니다.

문자열을 검색하고 파일에서 특정 열을 반환합니다.

다음을 포함하는 test_wd라는 파일이 있습니다.

dkde456:[email protected]
dkde123:[email protected]  
dkde789:[email protected]

첫 번째 열은 사용자 ID이고 두 번째 열은 전체 이메일 주소입니다. 내가 dkde123이라고 가정해 봅시다. 스크립트를 실행했는데 결과가 내 이메일 주소로만 전송됩니다.

나는 이것을 썼다:

LMUSER="`whoami`"
# So now I check whether my user-name is in the file:
if grep  "${LMUSER}" test_wd
then echo "found"
# ??????? How to create a file and send this file to my email address
else
    echo "not found"
    exit 0
fi 

이제 스크립트를 실행하여 파일을 생성하고 파일을 내 이메일 주소로 보낼 수 있도록 컬럼2를 선택하려고 합니다. 만약에if 조건문위 코드에서 물음표 대신 true를 반환하시겠습니까?

답변1

이를 수행하는 방법에는 여러 가지가 있습니다. 이것은 grep+ cut변형입니다 ...

# surround LMUSER with ^ and : to make sure we match whole usernames only
email=$(grep "^${LMUSER}:" test_wd | cut -d: -f2)

# $email will be empty unless there was a match
if [[ -n $email ]]; then
    # send the message to "$email"
fi

아니면 당신이 그것을 좋아할까요 sed?

email=$(sed -n "s/^${LMUSER}:\(.*\)/\1/p" test_wd)

-n인쇄용으로 명시적으로 지정된 행(예: p여기에서 바꾸기 플래그가 있는 행)을 제외한 모든 행의 인쇄를 건너뜁니다. "대체가 발생하면 이 줄을 인쇄하세요"라고 표시됩니다.

이메일 주소만 추출하려면 해당 부분을 괄호로 묶어야 합니다 \(. \)그런 다음 교체 시 이 괄호 안에 있는 텍스트를역참조: \1.

답변2

awk를 사용하여 이메일 주소를 추출할 수 있습니다.

email=$(awk -F: -v usa=$(whoami) '$1 == usa { print $2 }' test_wd)

-F를 사용하여 필드 구분 기호를 로 설정 :하고 사용자 이름을 변수로 전달합니다 usa. 첫 번째 :구분된 데이터가 사용자 이름과 같으면 두 번째 데이터인 이메일 주소를 인쇄합니다.

답변3

제목이 "test"인 "Hello user"라는 메시지를 보내려면 다음을 시도해 보세요( mutt설치되어 작동한다고 가정).

awk -F: '$1==user {print "Helo "$1 | "mutt -s 'test' " $2}' user=$USER test_wd

관련 정보