首页 > 解决方案 > 我无法使用 shell 脚本替换文件中的内容

问题描述

(功能(){})(); window.getJetPaths=function(b){var c={knockout:"/emsaasui/uifwk/libs/4.2.0-41239.001032001/js/oraclejet/js/libs/knockout/knockout-3.4.0","knockout.mapping ":"/emsaasui/uifwk/libs/4.2.0-41239.001032001/js/oraclejet/js/libs/knockout/knockout.mapping-latest",jquery:"/emsaasui/uifwk/libs/4.2.0-41239.001032001/js /oraclejet/js/libs/jquery/jquery.min",jqueryui:"/emsaasui/uifwk/libs/4.2.0-41239.001032001/js/oraclejet/js/libs/jquery/jquery-ui-1.12.0.custom。 min","jqueryui-amd":"/emsaasui/uifwk/libs/4.2.0-41239.001032001/js/oraclejet/js/libs/jquery/jqueryui-amd-1.12.0.min",promise:"/emsaasui/ uifwk/libs/4.2.0-41239.001032001/js/oraclejet/js/libs/es6-promise/es6-promise.min",要求:"/emsaasui/uifwk/libs/4.2.0-41239。

这是这里的文件内容,我只想用 return 语句替换window.getJetPaths整个定义。由于无法替换“/,{,}”而出现错误

Below is my script:

#!/bin/bash
filePath='D:/emsaasui/uifwk/libs/4.2.0-41239/js/jetLoader.js'

line=$(awk '/getJetPaths/{print NR}' $filePath)
str=$(tail -n +$line $filePath)
#echo $str
tempStr=""
count=0
for (( i=0 ; i < ${#str} ; i++ )) {
    arr[$i]=${str:i:1}
    #printf "%s\n" "${arr[@]}"
        if [[ ${arr[$i]} = '{' ]]
        then
        count=$((count+1))
        echo $count
    fi
        if [[ $count -eq "1" || $count -eq "2" ]]
        then
        tempStr=${tempStr}${arr[$i]}

        fi
        if [[ ${arr[$i]} = '}' ]]
        then
        count=$((count-1))
       if [[ $count = 0 ]]
        then
        break
        fi
   fi
   }
   echo $tempStr
sed 's/\\$tempStr{\([^}]*\)}/\1 %/g'

提前致谢。

标签: shellreplacescripting

解决方案


最简单的情况 - 无论如何都在一条线上。只需进行文字替换。假设文件名为 x -

sed 's/window.getJetPaths=function.*return b};/window.getJetPaths=function(b){return b};/' x > y

观察元字符。Sed 赋予这些特殊含义,除非经过仔细限定或包含在广泛匹配中,否则它们不会匹配。


推荐阅读