AWK 用 javascript 代码替换文件中的字符串
AWK replace string in file with javascript code
我想用从文件中读取的一些代码替换 awk 中的常量 javascript 行。
交互式 运行 在 bash 中的命令行工作:
CUSTOM_CODE=`cat custom_code.txt`
awk -v r=$CUSTOM_CODE '{gsub(/export default function\(\) \{/,r)}1' main.js > main-patched.js
问题是,如果我将这 2 个命令放在 bash 文件中,它将不再起作用,并出现以下 awk 错误:awk: cannot open myobj (No such file or directory)
.
示例文件:
main.js
import asdas form "asdasdsa"
export default function() {
let a ="asdasd"
}
custom_code.txt
const myobj = {
aaaa: bbb.asdasd("12345"),
aaa2: 1
}
function myfunction(params){
//1
// comment
let var1 ="a"
Copy/paste 你的脚本变成 http://shellcheck.net and it'll explain the error message you're getting (hint - always quote your shell variables) 等等。您发布的代码不可能在命令行或脚本中运行。
正确的方法是将新代码读入 awk 变量(不是 shell 变量),然后进行字符串匹配和替换(不是*sub() 因为在新代码中给定 &
会失败,并且需要您在主文件中转义正则表达式元字符):
$ awk '
NR==FNR { new=new sep [=10=]; sep=ORS; next }
[=10=]=="export default function() {" { [=10=]=new }
{ print }
' custom_code.txt main.js > main-patched.js
$ cat main-patched.js
import asdas form "asdasdsa"
const myobj = {
aaaa: bbb.asdasd("12345"),
aaa2: 1
}
function myfunction(params){
//1
// comment
let var1 ="a"
let a ="asdasd"
}
我想用从文件中读取的一些代码替换 awk 中的常量 javascript 行。 交互式 运行 在 bash 中的命令行工作:
CUSTOM_CODE=`cat custom_code.txt`
awk -v r=$CUSTOM_CODE '{gsub(/export default function\(\) \{/,r)}1' main.js > main-patched.js
问题是,如果我将这 2 个命令放在 bash 文件中,它将不再起作用,并出现以下 awk 错误:awk: cannot open myobj (No such file or directory)
.
示例文件:
main.js
import asdas form "asdasdsa"
export default function() {
let a ="asdasd"
}
custom_code.txt
const myobj = {
aaaa: bbb.asdasd("12345"),
aaa2: 1
}
function myfunction(params){
//1
// comment
let var1 ="a"
Copy/paste 你的脚本变成 http://shellcheck.net and it'll explain the error message you're getting (hint - always quote your shell variables) 等等。您发布的代码不可能在命令行或脚本中运行。
正确的方法是将新代码读入 awk 变量(不是 shell 变量),然后进行字符串匹配和替换(不是*sub() 因为在新代码中给定 &
会失败,并且需要您在主文件中转义正则表达式元字符):
$ awk '
NR==FNR { new=new sep [=10=]; sep=ORS; next }
[=10=]=="export default function() {" { [=10=]=new }
{ print }
' custom_code.txt main.js > main-patched.js
$ cat main-patched.js
import asdas form "asdasdsa"
const myobj = {
aaaa: bbb.asdasd("12345"),
aaa2: 1
}
function myfunction(params){
//1
// comment
let var1 ="a"
let a ="asdasd"
}