linux下使用Mail命令发送邮件的配置、快速实现以及sed命令的一些补充:行结合模式匹配取内容及sed命令显示配置文件中的有效内容

server/2024/9/23 11:12:57/

一、linux下使用Mail命令发送邮件的配置及快速实现

之前在服务器上增加了一些日志统计shell脚本并且每周进行一次日志分析统计自动在周一早上发到我的邮箱,最近服务器进行了迁移收缩,又得做点重复的事情,首先是让服务器支持邮件发送。

1:yum快速安装mail服务

[dev@B73 ~]$ sudo mail
-bash: mail: command not found
[dev@B73 ~]$ sudo yum install -y mainx
Loaded plugins: fastestmirror, security
Setting up Install Process
....
Complete!
#mail的使用
[dev@B73 ~]$ mail -help
Send options without primary recipient specified.
Usage: mail -eiIUdEFntBDNHRV~ -T FILE -u USER -h hops -r address -s SUBJECT -a FILE -q FILE -f FILE -A ACCOUNT -b USERS -c USERS -S OPTION users

-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<邮件文件>:读取指定邮件文件中的邮件;
-i:不显示终端发出的信息;
-I:使用互动模式;
-n:程序使用时,不使用mail.rc文件中的设置;
-N:阅读邮件时,不显示邮件的标题;
-s<邮件主题>:指定邮件的主题;
-u<用户帐号>:读取指定用户的邮件;
-v:执行时,显示详细的信息。

2:配置mail文件,在最后添加smtp的账号密码

[dev@B73 ~]$ sudo vim /etc/mail.rc
# For Linux and BSD, this should be set.
set bsdcompat
set from=hello@04007.cn
set smtp=mail.04007.cn
set smtp-auth-user=hello@04007.cn
set smtp-auth-password=password..
set smtp-auth=login

3,mail用法:完成以上两步即可以在mail中发送邮件:

[dev@B73 ~]$ echo "this is a test mail." | mail -s "test_mail" hello@007.cn 

mail可以有很多用法,比如可以方便地发送复杂的html内容,同时秒送给多人,发送带附件邮件,使用文件进行邮件发送等等,用法如下:

#shell脚本中使用mail发送复杂的html内容:
echo $charall | mail -s "$(echo -e "标题\nContent-Type: text/html; charset=utf-8")" hello@007.cn
#邮件同时发送给多人的用法
echo $charall | mail -s "$(echo -e "标题\nContent-Type: text/html; charset=utf-8")" -c hello@007.cn test@007.cn 
#带附件的用法:
mail -s "this is a test mail"  hello@007.cn  -a  /log/logstat.log
#使用文件进行邮件发送
mail -s "this is a test mail" hello@007.cn  < mail.txt

二、sed命令的一些补充:行结合模式匹配取内容及sed命令显示配置文件中的有效内容

    之前有一篇文章对linux下的sed命令有一些了解, linux文本分析利器sed命令的使用详细举例[行操作,模式匹配,替换,引用,后向引用]_sed 后向引用-CSDN博客,另有一篇文章:Linux下的sed命令详解、awk模糊匹配统计行数命令详解 以及 tar压缩多个绝对路径文件时如何去掉绝对路径-CSDN博客 对sed命令进行了详细的测试使用,但还是觉得对sed记忆不够深刻,但sed,awk,grep是文本操作的三大利器,有空的时候觉得有必要多进行了一些尝试使用了解。

1,sed结合按行和模式匹配来取内容

        在使用sed进行取内容时,除了可以使用按行、模式匹配、模式范围匹配外,sed还支持结合按行和模式匹配来取内容。如下可以使用从第三行开始查找,一直查找到的匹配890的行的内容进行显示。不过注意这里是查找到第一个出现890内容的这一行即停止。

[root@007 shell]# nl s.txt  1  what is you name, yes?aaz1232  bettertest, dont konw this char3  jiujiu4  333,123,or hello 7895  --hello--6  12345678907  hellowolrd, some times this is good;8  thisiswhat,haha,shat!9  toutiao333.
[root@007 shell]# cat -n s.txt | sed -n '3,/890/p'3  jiujiu4  333,123,or hello 7895  --hello--67  1234567890#如下是修改s.txt内容,以便查看sed模式匹配是查找到第一个匹配的行[root@007 shell]# cat -n s.txt 1  what is you name, yes?aaz1232  bettertest, dont konw this char3  jiujiu4  333,123,or hello 7895  --hello--67  12345678908  hellowolrd, some times this is good;9  thisiswhat,haha,shat!10  toutiao333.11  yes,the end is 1234567890.
[root@007 shell]# cat -n s.txt | sed -n '3,/890/p'3  jiujiu4  333,123,or hello 7895  --hello--67  1234567890

    不过写到这里,突然想那如果我真要实现sed查看到最后一次模式的行内容怎么实现呢?想了一想,办法肯定是有的,不过加了个tac命令,当然除了使用tac外,使用head,tail之类的都可以,好像只使用sed不是很好实现。我这里就使用tac操作一下:

[root@007 shell]# sed -n '3,$p' s.txt | tac | sed -n '/890/,$p' | tac
jiujiu
333,123,or hello 789
--hello--1234567890
hellowolrd, some times this is good;
thisiswhat,haha,shat!
toutiao333.
yes,the end is 1234567890.

2, 多命令执行的-e选项、分号及多行模式

    上面这里列的是在取内容上比之前两篇文章不同的地方,对于sed命令,之前文章也有记录一些比如使用&引用,使用\1后向引用等高级的用法,也有记录常用的显示命令p,行后增加命令a,行前插入命令i,替换本行命令c,以及删除行d,替换命令s,只显示行号命令=,读取和写入文件命令rw等。保存一张图:

8d133974ac87f297bdb8469afc07b32d.png

    看一下这个-e选项, -e可以让sed命令支持多个操作同时进行,比如如下即能显示匹配890的行,同时也能进行内容替换。

[root@007 shell]# sed -n -e '/890/p' -e '/333/s/333/===/gp' s.txt   
===,123,or hello 789
1234567890
toutiao===.
yes,the end is 1234567890.

    -e选项的功能并不仅仅有此一个办实现,在sed命令里可以使用分号进行多命令执行,也可以使用换行或者使用-f加载文件来执行多命令,比如下面可以使用;分开两个命令,一个是打印行号,一个是打印内容。同时也可以使用分行来实现。如下:

[root@007 shell]# sed -n '/890/=; /890/p' s.txt 
7
1234567890
11
yes,the end is 1234567890.
#使用多行模式
[root@007 shell]# sed -n '
> /890/=
> /890/p
> ' s.txt
7
1234567890
11
yes,the end is 1234567890.

    再记一个常用的例子,就是在查看配置文件的时候,通常我们只需要显示配置文件中的有效内容,即要删除空行和注释行,当然可以使用grep等其它命令来实现,这里考虑一下使用sed命令来实现显示配置文件中的有效内容:

#当然可以使用管道进行两次内容匹配,不过这里是不能使用-e的。
[root@007 redis-3.2.1]# sed  -n '/^#/!p' redis.conf | sed -n '/^$/!p'
#也有更好的办法,想了想试出了下面的这个命令,使用-r来使用扩展正则表达式,这个命令是不是很精简。
[root@007 redis-3.2.1]# sed  -n -r '/(^#|^$)/!p' redis.conf
#使用grep也很方便
[root@007 redis-3.2.1]#grep -vE "^$|^#" redis.conf

    最后回到上面提到的一个问题,如果只想使用sed查看从某行到最后一次模式匹配的行内容,有没有办法实现?实际也是有的,需要结合sed里的一些内存缓冲区的命令Gh,使用G将一行追加到模式空间(G),追加结束后使用h命令拷贝模板式空间的内容到内存中的缓冲区,最后执行(备注命令执行最后会输出一行空行,原因是保留空间默认为空),命令如下:

[root@007 shell]# sed -n '{4,$G;h;$p}' s.txt | sed -n '/890/,$p' | sed -n '{G;h;$p}'   
jiujiu
333,123,or hello 789
--hello--1234567890
hellowolrd, some times this is good;
thisiswhat,haha,shat!
toutiao333.
yes,the end is 1234567890.

http://www.ppmy.cn/server/119054.html

相关文章

MATLAB中的代码覆盖测试:深入指南与实践应用

在软件测试领域&#xff0c;代码覆盖测试是一种重要的技术&#xff0c;用于评估测试用例的完整性和有效性。在MATLAB环境中&#xff0c;代码覆盖测试可以帮助开发者确保他们的代码在各种条件下都能正常工作&#xff0c;并且能够发现可能被忽视的错误。本文将详细介绍如何在MATL…

rust + bevy 实现小游戏 打包成wasm放在浏览器环境运行

游戏界面 代码地址 github WASM运行 rustup target install wasm32-unknown-unknown cargo install wasm-server-runner cargo run --target wasm32-unknown-unknowncargo install wasm-bindgen-cli cargo build --release --target wasm32-unknown-unknown wasm-bindgen --…

基于Springboot+vue的音乐网站

随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了音乐网站的开发全过程。通过分析音乐网站管理的不足&#xff0c;创建了一个计算机管理音乐网站的方案。文章介绍了音乐网站的系统分析部分&#xff0c;包括可行性分析…

渗透测试综合靶场 DC-1 通关详解

Vulnhub是一个提供各种漏洞环境的靶场平台&#xff0c;非常适合安全爱好者和渗透测试初学者进行学习和实践。在这个平台上&#xff0c;你可以下载多种虚拟机&#xff0c;这些虚拟机预装了各种漏洞&#xff0c;让你可以在本地环境中进行渗透测试、提权、漏洞利用和代码审计等操作…

java高频面试题(2024最新)

HashMap使用哪些方法来解决哈希冲突&#xff1f; 使用链地址法&#xff08;使用散列表&#xff09;来链接拥有相同hash值的数据&#xff1b;使用2次扰动函数&#xff08;hash函数&#xff09;来降低哈希冲突的概率&#xff0c;使得数据分布更平均&#xff1b;引入红黑树进一步…

Linux链路聚合+网桥

一、简介 链路聚合&#xff08;Link Aggregation&#xff09;&#xff1a; 链路聚合是一种将多个物理网络连接&#xff08;链路&#xff09;合并为一个逻辑通道的技术&#xff0c;以增加吞吐量并提供冗余&#xff0c;从而提高网络的可靠性和性能。例如&#xff0c;你可以将两个…

浅显易懂的Git教程

Git概述 SVN与Git的对比 SVN&#xff08;Subversion&#xff09; 类型&#xff1a;集中式版本控制系统 工作流程&#xff1a; 从中央服务器下载最新版本到本地。在本地进行开发。提交更改回中央服务器。 优点&#xff1a; 简单易用&#xff0c;适合小型团队。版本历史清…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…