我正在使用bash创建新文件,我需要为此文件添加导入指令:
// main.less
// @import "TOKEN.less";
@import "module_a.less";
@import "module_b.less";
// ...
// main.js
define(function(require) {
// require('TOKEN.js');
require('module_a.js');
require('module_b.js');
// ...
});
我需要编辑此文件以添加新的@import
和require
指令。我正在尝试复制TOKEN
行,并用新模块名称替换TOKEN
。
我开始使用sed
替换令牌,但我找不到复制该行的方法。
现在我使用node -e
来执行节点脚本而不是读取文件,迭代行并复制我需要的那些,但这很乱,也许bash有一个简单的方法来执行此操作。
更新
预期的行为是,如果我执行
my_script.sh module_user
它将编辑这些文件,使它们最终像这样
// main.less
// @import "TOKEN.less";
@import "module_user.less";
@import "module_a.less";
@import "module_b.less";
// ...
// main.js
define(function(require) {
// require('TOKEN.js');
require('module_user.js');
require('module_a.js');
require('module_b.js');
// ...
});
我真的不关心@import
/ require
答案 0 :(得分:2)
我已经为你写了一个小脚本,可以解决这个问题:
#!/bin/bash
# first param = file name
# second param = modul name
if [ "$#" -ne 2 ]; then
echo "2 parameters required: file name and module name"
exit
fi
_LINE=$(grep 'TOKEN' $1)
_UNCOMMENTED_LINE=$(echo $_LINE | sed 's/\/\///g')
_REPLACED_LINE=$(echo $_UNCOMMENTED_LINE | sed -e "s/TOKEN/$2/g")
sed -i "s#$_LINE#$_LINE\n$_REPLACED_LINE#" $1
编辑: 根据您的第一个示例,替换的内容将是:
// main.less
// @import "TOKEN.less";
@import "test2.less";
@import "module_a.less";
@import "module_b.less";
// ...
其中 test2 是模块名称。
答案 1 :(得分:1)
以下sed
命令似乎在mac上运行正常。然后,您可以使用Jacek Sokolowski执行的其余脚本来检查参数等。
# the newlines are important
sed -i"" '/TOKEN/a\
@import "module_user.less";
' main.less