我想用
INSERT
中的文件内容替换 template.js
中的文本 insert.json
并将其写入 result.js
。
插入.json:
{
"insert": true,
"other": "you can ignore line indentation"
}
模板.js:
function test() {
const x = INSERT;
console.log(x);
}
结果.js:
function test() {
const x = {
"insert": true,
"other": "you can ignore line indentation"
};
console.log(x);
}
我正在寻找替代
INSERT
。但另一种选择,例如要查找的正则表达式,也很棒:
const x = (INSERT);
替换 $INSERT
(const x = )INSERT(;)
替换 $1 $INSERT $2
你不能使用像
$(cat insert.json)
这样的东西,因为insert.json文件很大并且超出了终端字符限制。
这不是我的问题的解决方案,而是另一种变体,如果有人需要的话。
插入.js:
const x = {
"insert": true,
"other": "you can ignore line indentation"
};
模板.js:
function test() {
// insert.js start
const x = {};
// insert.js end
console.log(x);
}
脚本.sh:
#!/usr/bin/env bash
replaceTemplateStartEnd() {
local expStart='^\/\/ insert.js start'
local expEnd='^\/\/ insert.js end'
local insertFile='insert.js'
sed -e "/${expStart}/!b;:a;N;/${expEnd}/M!ba;r ${insertFile}" -e 'd' template.js > "${1}"
}
replaceTemplateStartEnd 'result.js'
结果.js:
function test() {
const x = {
"insert": true,
"other": "you can ignore line indentation"
};
console.log(x);
}
如果
template.js恰好包含
cat
一次,则除了 INSERT
之外,无需任何外部命令即可工作:
( TEMPLATE="$(cat template.js)"
TEMPLATE2="${TEMPLATE#*INSERT}"
echo "${TEMPLATE%%INSERT*}"
cat insert.json
echo "$TEMPLATE2"
)
如果 template.js 恰好包含
INSERT
一次,则无需任何外部命令即可工作:
( TEMPLATE="$(while read L; do echo "$L"; done <template.js)"
TEMPLATE2="${TEMPLATE#*INSERT}"
echo "${TEMPLATE%%INSERT*}"
cat insert.json
echo "$TEMPLATE2"
)