regex - sed -i '/$(command 1)/$(command 2)/' myHtmlFile ? 使用 sed 和 awk 进行内联编辑
问题描述
我正在编写一个 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 结果的变量一起工作),但我不确定如何管理这种内联编辑的循环。它可能可以用一个强大的正则表达式来解决,但我很不擅长它^^
解决方案
$ sed -E 's#[^:]+/([^:!]+).*: #\1: #' file
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>
上面的正则表达式这样做:
[^:]+/
- 使用不包含冒号且以 结尾的前导字符串/
,例如/path/to/
([^:!]+)
- 在捕获组中保存不包含冒号或感叹号的后续字符串,例如infected-zipfile
.*:
- 使用以冒号开头的后续字符串,后跟一个空白字符,例如!(1)ZIP:eicar.com:
.
然后替换这样做:
\1
- 打印上面步骤 2 中保存到捕获组 1 中的字符串:
- 打印一个冒号后跟一个空白字符(我也可以为此使用捕获组)
推荐阅读
- sql - 返回不同的行,同时从不同的列中排除一列
- javascript - Moment.js 为字符串输入添加时间
- postgresql - 如何编写一个 postgresql 函数来汇总每日报告表中的分组指标
- c# - 如何合并列表
GroupBy() 中的字段 - reactjs - 如何断言包装在 debounce 中的函数被调用
- wordpress - Wordpress 下拉菜单在本地工作,但不在服务器上
- r - 在 Rstudio for Mac 中获取库(汽车)以安装时出错
- qt - 文本以十进制形式在“Behavior on”中打印,但需要打印为 Integer QML
- python-3.x - 无法加载目标文件
- python - 即使前面的“if”语句为真,Python 程序仍在运行“else”语句