【发布时间】:2018-12-28 03:59:36
【问题描述】:
我正在编写一个 shell 脚本,用于构建和编辑一个 html 文件,该文件的主要内容基本上是 clamscan (ClamAV) 的输出。 所以,脚本的任务是:翻译输出,删除无用的东西,添加 html 标签等等。 不过,我坚持我想要的最后一个修改。
clamscan 的编辑输出的一部分如下所示:
/path/to/infected-file: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
/path/to/infected-zipfile!(1)ZIP:eicar.com: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
/path/to/infected-zipfilewithinzipfile!ZIP:eicar_com.zip!(2)ZIP:eicar.com: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
我想缩小那些长线。像这样的东西是最好的:
infected-file: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
infected-zipfile: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
infected-zipfilewithinzipfile: Eicar-Test-Signature<span class="mep-subhead-warning"> FOUND</span>
但我已经很乐意删除受感染文件的路径。
由于使用 awk 似乎很容易获得一些结果,并且我在之前的所有编辑中都使用了 sed,所以我认为我最好的选择是:
sed -i 's/<awk command 1>/<awk command 2>/' myHtmlFile
不幸的是,我花了几个小时以各种方式改变它,但没有运气。
似乎存在语法问题,例如:
sed "s#$(awk -F': ' '{print $1}' testfile)#$(awk -F': ' '{print $1}' testfile | awk -F'\' '{print $NF}')#" testfile
我是使用单引号还是双引号,是尝试连接 sed 字符串还是尝试根据所选语法转义各种字符。
我也考虑过循环(这样我就可以使 sed 与包含 awk 结果的变量一起工作),但我不确定如何为这种内联编辑管理循环。 它可能可以用一个强大的正则表达式来解决,但我很不擅长它^^
【问题讨论】: