使用 sed 进行字符串替换

问题描述 投票:0回答:1

我想使用 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 sed ksh
1个回答
0
投票

如果查询是正则表达式:

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
© www.soinside.com 2019 - 2024. All rights reserved.