다음과 같은 줄이 포함된 파일이 있습니다.
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
user=<[email protected]>,
이 파일에서 이메일 주소를 추출하는 가장 좋은 방법은 무엇입니까?
답변1
awk
다른 답변에 제공된 대로 사용할 수 있습니다 .
sed
또는 이와 perl
유사한 것을 사용할 수 있습니다 ruby
.
perl -wlne '/<(.*)>/ and print $1' file
그러나 bash
필요에 따라 사용하는 것도 가능합니다.
첫 번째 단계. 파일을 한 줄씩 출력하십시오.
while read line; do echo $line; done <file
다음으로 불필요한 접두사와 접미사를 제거합니다.
while read line; do line=${line##user=<}; line=${line%%>,}; echo $line; done <file
마찬가지로 더 일반적이고 더 짧습니다.
while read line; do line=${line##*<}; echo ${line%%>*}; done <file
이는 귀하의 예에서 작동하며 다른 쉘에서도 작동합니다.
시작과 끝에서 몇 개의 문자만 제거하려면 다음을 사용할 수 있습니다.
while read line; do echo ${line:6:-2}; done <file
man bash
자세한 내용은 bash()의 자세한 매뉴얼 페이지를 읽어보세요 .
답변2
아마 이보다 더 좋은 방법이 있을 것 같지만 생각이 나지 않습니다.
awk -F '<|>' '{ print $2 }' filename
답변3
최신 버전에서 bash 사용을 고집하는 경우:
쉘 매개변수 확장:http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html
문자열 길이:http://wiki.bash-hackers.org/syntax/pe#string_length
하위 문자열 확장:http://wiki.bash-hackers.org/syntax/pe#substring_expansion
#!/bin/bash
while read line; do
len=$((${#line}-8))
echo ${line:6:$len}
done < file