여러 개의 txt 파일이 있고 파일에 "Provider"라는 텍스트가 포함되어 있으면 파일에서 이메일을 추출하고 싶습니다. 텍스트 파일의 형식이 다릅니다. "공급자"는 텍스트의 어느 곳에나 나타날 수 있습니다.
다음은 몇 가지 간단한 예입니다.
파일 1.txt
이름: Joe1
공급자
...
이메일[이메일 보호됨]
파일 2.txt
이름: Joe2
...
고객
...
이메일[이메일 보호됨]
파일 3.txt
이름: Joe3
... 이메일
제공
[이메일 보호됨]
이 단축 코드를 사용하고 있지만 모든 이메일이 반환됩니다.
$ awk -F, '{
for (i=1; i<=NF; i++)
if ($i ~ /@/)
print $i
}' *
도와주세요?
감사해요
답변1
$ awk 'FNR==1 { provider = False }
$0 ~ /Provider/ { provider = True}
$0 ~ /@/ && provider == True {
for (i=1; i<=NF; i++) {
if ($i ~ /@/) print $i;
}
}' *
- 첫 번째 줄로
provider
설정된 각 파일에 대해False
- 줄에 다음이 포함되어 있으면
Provider
공급자를 다음으로 설정하세요.True
- 줄에 이 포함되어 있고
@
해당 단어가 이전에 본 적이 있는 경우Provider
필드를 반복하고 단어가 포함된 필드를 인쇄합니다.@
답변2
당신은 시도 할 수 있습니다:
for fname in file*.txt
do
if grep 'Provider' ${fname} &> /dev/null ; then
grep -oP 'Email[[:space:]]*\K(.*@.*)' ${fname}
fi
done
답변3
grep -l Provider file*.txt | xargs grep -o '[^@[:space:]]+@[^@[:space:]]+'
[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,}
예를 들어 더 정확해야 하는 경우에는 이메일 주소에 대해 더 정확한 정규식이 있습니다 .