我正在编写一个 shell 脚本,其中使用了三个 html 文件。现在我正在尝试连接所有三个文件,并将内容作为电子邮件发送给我自己。
请参阅下面我正在尝试执行的三个文件:hello.html
、hello1.html
、hello2.html
。
现在,我将所有这三个文件的输出附加到Final.Html
如下文件中,并将其作为电子邮件发送。
>Final.html
cat hello.html >> Final.html
cat hello1.html >> Final.html
cat hello2.html >> Final.html
cat Final.html | sendmail -t
现在我输入的所有三个文件如下所示
$ cat hello.html
Hello world
$ cat hello1.html
india is my world
$ cat hello2.html
India is the best
发送邮件后,我得到的输出如下
Hello world
india is my world
India is the best
我正在寻找的输出如下,每个文件之间有一个空行。获得干净清晰的输出。
Hello world
india is my world
India is the best
答案1
这应该给出所需的输出,
awk 'NR>1 && FNR==1{print ""};1' ./*.html > /path/to/Final.html
(确保输出文件不在输入文件列表中)
答案2
您只需使用一次即可完成所有cat
操作,而它通常用于显示A终端上的文件,实际上是为了con-猫-生成文件(即将它们附加在一起):
$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" [email protected]
答案3
这样就可以了,我添加了代码来添加空行。
echo
会输出一个换行符,它也可以用来输出更多。
>Final.html
cat hello.html >> Final.html
echo >> Final.html
cat hello1.html >> Final.html
echo >> Final.html
cat hello2.html >> Final.html
下一个使用括号,以减少代码量。
{
cat hello.html
echo
cat hello1.html
echo
cat hello2.html
}> Final.html
答案4
使用GNU awk
(支持ENDFILE
特殊模式):
awk '1; ENDFILE { print "" }' hello.html hello1.html hello2.html >Final.html
该awk
脚本依次传递每个文件的未修改数据(1;
可以替换为{ print }
,其作用相同)。在每个文件的末尾,该ENDFILE
块将输出一个空行。
要在每个文件的数据之前另外插入文件名(这不是问题的一部分):
awk 'BEGINFILE { print FILENAME } 1
ENDFILE { print "" }' hello.html hello1.html hello2.html >Final.html
特殊模式的BEGINFILE
工作方式与此类似,ENDFILE
但会在读取新文件的第一行之前触发。该FILENAME
变量是标准awk
变量,包含当前输入文件的路径名。