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"
}