我想使用 sed 在文件(名为 inputfile)中进行以下转换
搜索行:
$CmdVar $ENV\util.exe firstparm secondparm
搜索到的模式是 util.exe ; firstparm 和 secondaryparm 始终是最后两个单词。 该工作包括使用 ###、标签 (mytag)、###、搜索到的模式 ### 以及后面跟着 ### 的两个参数来注释匹配的整行。
所以预期的输出是:
###mytag###util.exe###firstparm secondparm### $CmdVar $ENV\util.exe firstparm secondparm
我正在考虑将一些 grep/awk 和循环结合起来,以便通过指定行号来收集相关信息以使用 sed。
info=`grep -n "util.exe" inputfile | awk '{print $1,$(NF-1),$NF","}'` if [ ! -z $info ]; then tr , '\n' <<<"$info" | while read; do words=${REPLY} # use sed here by splitting $words done fi
由于我必须处理大量文件,这可能需要很多时间。
有没有更直接的方法使用 sed 或 awk 来实现这一点? 预先感谢
如果查询是正则表达式:
awk '
$0 ~ q { printf "###%s###%s %s### ", tag,$(NF-1),$(NF) }
{ print }
' tag='mytag' q='util.exe' inputfile >outputfile
如果查询是纯字符串:
awk '
index(q) { printf "###%s###%s %s### ", tag,$(NF-1),$(NF) }
{ print }
' tag='mytag' q='util.exe' inputfile >outputfile