bash中的动态搜索和字符串复制

时间:2017-03-14 19:57:36

标签: linux bash

我使用mailget进行自制"备份" system,在接收包含字符串" backup"的邮件时备份预先指定的文件。使用以下搜索命令:

$ grep -rnw '/path/to/mailbox/' -e "backup"

我想将一个mailaddress提取到一个变量$ var,而字符串" Return-Path:" (13个字符),在每个邮件文件的开头始终是静态的,如下所示:

  

Return-Path:< someone@domain.com>

总之:当一个文件包含字符串" backup"在给定路径下检测到,脚本应该从被认为的文件中提取mailaddress到$ var。

无法理解这一点,感谢任何帮助。

1 个答案:

答案 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;开头。它做了一些假设,使其更短但不那么健壮;我的目标只是为了证明,而不是为你编写生产质量的代码。