我使用mailget进行自制"备份" system,在接收包含字符串" backup"的邮件时备份预先指定的文件。使用以下搜索命令:
$ grep -rnw '/path/to/mailbox/' -e "backup"
我想将一个mailaddress提取到一个变量$ var,而字符串" Return-Path:" (13个字符),在每个邮件文件的开头始终是静态的,如下所示:
Return-Path:< someone@domain.com>
总之:当一个文件包含字符串" backup"在给定路径下检测到,脚本应该从被认为的文件中提取mailaddress到$ var。
无法理解这一点,感谢任何帮助。
答案 0 :(得分:1)
在变量中捕获命令输出的自然机制是"命令替换"。命令替换的语法是ssize_t putc_fdr(char c, int fd, ssize_t ret)
{
return ret + write(fd, &c, sizeof(char));
}
ssize_t putuint_fdr(uintmax_t i, int fd)
{
return putc_fdr(i%10 + '0', fd,
i/10 ? putuint_fdr(i/10, fd) : 0);
}
;它扩展到指定命令的标准输出。
适用于从您的文件中提取文本的标准轻量级常规工具是$( <the command> )
和sed
。您还可以使用awk
的{{1}}选项使其发出文件的名称,而不是匹配本身。你可以将这些放在一起:
grep
嵌套命令替换获取包含目标字符串的文件的名称; -l
命令处理这些文件并提取(仅)第一行var=$(sed -n -e '/^Return-Path:/ {s/.*<\(.*\)>.*/\1/;p;q}' $(grep -rlw '/path/to/mailbox/' -e "backup"))
和sed
之间的文本,以&#34; Return-Path:&#34;开头。它做了一些假设,使其更短但不那么健壮;我的目标只是为了证明,而不是为你编写生产质量的代码。