当前位置: 首页 > 知识库问答 >
问题:

如何用sed[duplicate]替换缩小的javascript文件中的多个值

罗淮晨
2023-03-14

我需要在一个缩小的javascript文件中替换几个值。操作系统是高山Linux。

我正在尝试编写一个通用正则表达式,它将查找foo:和任何字符,直到下一个像这样:foo:\uuuuuuuuuuuu:并替换为foo:“bar”foo:!0无论变量中的值是什么。这个脚本需要一直工作。它不应该依赖于在之后出现的was(表示属性中的值)。

以下是文件中的前几个字符

(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{3:function(l,n,t){l.exports=t("zUnb")},AytR:function(l,n,t){"use strict";t.d(n,"a",function(){return e});var e={appVersion:"1.4-beta",buildNr:"123.123",production:!0,tracking:!0,apiHost:"/api/",foo:""}},Cdxl:function(l,n,t){"use strict";t.d(n,"a",function(){return a});

这是我的开始它根本不是通用的。。。

APP_VERSION='"1.4-beta"'
BUILD_NR='"20190118.1"'
PRODUCTION="!"
TRACKING="!0"
API_HOST='"/api/"'
FOO='"bar"'

# demo for the first 3 variables 
sed -i "s/appVersion:[\"0-9A-Za-z.]*/appVersion:${APP_VERSION}/;s/buildNr:[\"0-9A-Za-z.]*/buildNr:${BUILD_NR}/;s/production:[!0-9A-Za-z.]*/production:${PRODUCTION}/" path/to/js-file.js

我试了几个小时——任何建议都欢迎。

提前谢谢!

共有1个答案

邹祺
2023-03-14

您可以使用正则表达式末尾的g修饰符替换所有出现的模式匹配。

{one:"1",two:"2",three:"3",one:"one",plz:"nope"}

我想用“42”替换one之后的所有内容。如果没有全局修饰符,我会得到以下结果:

$ sed -E 's/one:[^,]+/one:"42"/' foo.txt
{one:"42",two:"2",three:"3",one:"one",plz:"nope"}

请注意one:的第二个实例如何没有更改。现在使用g修饰符:

$ sed -E 's/one:[^,]+/one:"42"/g' foo.txt
{one:"42",two:"2",three:"3",one:"42",yas:"nope"}

它将替换所有事件。

将其粘贴到一个文件中,可能称为replacer。上海

#!/usr/bin/env bash

# declare `swap` to be an associative array
declare -A swap

swap[appVersion]='"1.4-beta"'
swap[buildNr]='"20190118.1"'
swap[production]="!"
swap[tracking]="!0"
swap[apiHost]='"\/api-2\/"'
swap[foo]='"bar"'

FILE=$1

for key in ${!swap[@]}; do sed -E -i 'bak' "s/${key}:[^,]+/${key}:${swap[${key}]}/g" $FILE; done

根据需要更改交换变量中的键和值。大小写很重要,并避开值中的任何反斜杠。

如果需要替换更多内容,只需添加更多的键/值对即可。循环将迭代所有键,按顺序应用更改。

sed可以使用-i标志自动创建备份文件;我认为在循环的每次迭代过程中,这些可能会被吹走。这里要小心。

像这样运行程序:$/替代者。sh文件名。js

希望这能有所帮助!

 类似资料:
  • 问题内容: 您好,我正在使用uglifyJs来最小化我的javascript文件,它一次可以处理一个文件,我想要的是将存在于名为JS的文件夹中的所有javascript文件最小化为名为JSM的文件夹。我的JS文件夹中有2个文件,分别称为test1.js和test2.js,我想对该文件夹运行uglify并在JSM文件夹中生成test1.min.js和test2.min.js,所以有一种方法可以这个?

  • 问题内容: 我有一个文件“ test.txt”,其中包含以下内容 我要做的是将它们替换为: 但是为什么这段代码不起作用? 什么是正确的方法? 问题答案: 使用代替。并添加标志以替换所有内容。

  • 问题内容: 我一直在网上寻找这个答案,但似乎找不到。 我有一个配置文件,其中包含: 我想将VAR5的值从VALUE5更改为VALUE10。不幸的是,我不知道VALUE5的值,因此无法搜索。因此,基本上我需要使用sed(或其他任何值)将VAR5的值替换为我想替换为的任何值。 问题答案: 您可以尝试使用此sed: 它给:

  • 假设我们想用它的摩尔斯码替换字母“a”,从text.txt文件到使用sed的隐藏的.out.txt文件,原始文件的内容是“这是一个测试”。 正如预期的那样,输出是“this is.-test”。 但是,假设我们希望执行sed的多个实例,而不需要使用-n参数不断打印sed的每个实例的结果。在这种情况下: 然而,在这种情况下,cat的输出与text.txt的内容相同,“这是一个测试”。 是否有一种可能

  • 我想在文本文件中用新的英文字符替换突厥语字符{code>{c',c',I',I',G',G',S',S}。 这是我的密码。我在控制台上只获得原始内容,没有任何更改,也不会创建新文件。 编辑: 这是适用于我的新代码。但是我想使用一个较短的代码来替换方法。

  • 我有一个文件,其中包含以下格式的正则表达式和替换文字字符串列表: 我想替换所有匹配的字符串与在多个文件。 我相信这是一个常见的问题,以前应该有人做过类似的事情,但我就是找不到用bash编写的现有解决方案。 例如: 输入: 预期产出: 主要挑战是: 要替换的字符串由POSIX扩展正则表达式描述,而不是文字,任何不是POSIX ERE元字符的字符,包括经常被一些工具用作regexp分隔符的,都必须被视