shell - 我无法使用 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'
提前致谢。
解决方案
最简单的情况 - 无论如何都在一条线上。只需进行文字替换。假设文件名为 x -
sed 's/window.getJetPaths=function.*return b};/window.getJetPaths=function(b){return b};/' x > y
观察元字符。Sed 赋予这些特殊含义,除非经过仔细限定或包含在广泛匹配中,否则它们不会匹配。
推荐阅读
- amazon-web-services - SQS lambda 集成- Lambda 没有收到任何消息
- r - Repeat a vector on a dataframe
- python-3.x - 为什么熊猫 read_csv() 在 jupyter 上返回 SSL: CERTIFICATE_VERIFY_FAILED?
- c# - 同时收集nameof和object
- sql - 创建选择嵌套子查询以计算一列中的不同项目
- javascript - 在Javascript中将子类存储为变量
- c# - System.Linq:以下方法或属性之间的调用不明确
- django - 为什么这个需要的文件夹变成了一个子模块?
- javascript - javascript中的递归以使用具有单个父元素的子元素构建HTML
- dynamic-data - DynamicData 和 ReactiveUI 上的自动刷新