如何使用“sed”使用bash脚本中的另一个文件的输出修改文件?

时间:2015-06-02 01:10:26

标签: linux bash shell awk sed

我目前正在制作一个bash脚本,用于自己的娱乐和爬出我的朋友,这基本上只是一个带循环倒计时的ssmtp命令。

while true; do
echo "sending..."
sudo ssmtp user@domain.com -v < /home/apx/Desktop/email.txt
echo "mail sent." 
date +"%m/%d/%Y %H:%M:%S $HOSTNAME"
echo "wait for cooldown..."
timecount(){
    min=0
    sec=5
    while [ $min -ge 0 ]; do
            while [ $sec -ge 0 ]; do
                    echo -ne "0$min:$sec\033[0K\r"
                    sec=$((sec-1))
                    sleep 1
            done
            sec=59
            min=$((min-1))
    done
}
timecount
done

我想学习一种方法,使用cat或其他东西打印包含电子邮件地址列表的文本文件的第一行,然后将输出通过管道传输到sed,这将编辑/etc/ssmtp/ssmtp.conf以便使用一个具有相同authpass的不同authuser,发送电子邮件,倒计时,并重复列表中的下一个电子邮件地址,直到它必须再次从顶部开始。

/etc/ssmtp/ssmtp.conf

root=postmaster
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
AuthUser=user@domain.com
AuthPass=password
#rewriteDomain=
hostname=apx
#FromLineOverride=YES

使用列表文本文件的输入&gt;编辑authuser值发送电子邮件&gt;倒计时&gt;在行

中重复下一个地址

我对sed有基本的了解,但还不足以完成这项任务。我意识到我可能会让它变得比以前更加复杂,但是......任何有助于理解这一点的帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

抱歉迟到的回复..好吧现在它运作良好现在你可以从许多电子邮件发送到一封电子邮件,请按照以下步骤操作:

  1. 首先,您需要为所有电子邮件提供不太安全的应用 在emailad.txt中找到gmail上的此链接,然后turn on https://www.google.com/settings/security/lesssecureapps

  2. 转到任何目录,例如/ home / apx / Desktop然后创建新文件夹,例如folder此文件夹应包含:

    `ssmtp.conf`(Note: ssmtp.conf found in `/etc/ssmtp/` directory), `email.txt`(message), `emailad.txt`(emails) then start type this script:
    
  3. #!/bin/bash

    y变量

    中的电子邮件数量

    y=3

    每封电子邮件的消息数量:

    echo "No. Of Msgs For each Email :";read number_of_messages;
    

    循环播放我们的电子邮件

    for (( x=1; x<=y; x++ ));
    do
    

    获取emailad.txt文件

    中的电子邮件
    emails=`echo $( cat emailad.txt | sed -n ''$x''p )`
    print_emails=`echo "$emails"`
    

    使用smtp变量搜索ssmtp.conf.bak文件中的任何电子邮件地址

    smtp=`grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" /home/apx/Desktop/folder/ssmtp.conf.bak`
    

    然后将ssmtp.conf.bak文件连接到sed以搜索ssmtp.conf.bak中的任何电子邮件地址,然后将其替换为我们在emailad.txt文件中找到的电子邮件

    cat /home/apx/Desktop/folder/ssmtp.conf.bak | sed 's/'$smtp'/'$print_emails'/g'  /home/apx/Desktop/folder/ssmtp.conf.bak > /etc/ssmtp/ssmtp.conf
    
    
    
    for (( f=1; f<=number_of_messages; f++ ));
    do
    ssmtp user@domain.com < email.txt    //email.txt which containes the message
    sleep 5
    done
    done& 
    

    完整的脚本:

    echo "No. Of Msgs For each Email :";read number_of_messages;
    y=3
    for (( x=1; x<=y; x++ ));
    do
    emails=`echo $( cat emailad.txt | sed -n ''$x''p )`
    print_emails=`echo "$emails"`
    smtp=`grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" ssmtp.conf.bak`
    cat ssmtp.conf.bak | sed 's/'$smtp'/'$print_emails'/g'  ssmtp.conf.bak > /etc/ssmtp/ssmtp.conf
    for (( f=1; f<=number_of_messages; f++ ));
    do
    ssmtp user@domain.com < emails.txt
    sleep 5
    done
    done&`