我需要在一个缩小的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
我试了几个小时——任何建议都欢迎。
提前谢谢!
您可以使用正则表达式末尾的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分隔符的,都必须被视