我有一个包含这样的行的文件:
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
这适用于您的示例,也应该适用于其他 shell。
如果您只想在前面和最后删除几个字符,您可以使用:
while read line; do echo ${line:6:-2}; done <file
您可以阅读 bash ( ) 的详细手册页man 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