仅在特定单词后替换部分文本

时间:2015-11-11 17:14:52

标签: javascript sed

我们正试图在一个大型的JavaScript代码库中使一些文件名保持一致。我们想要驼峰案例的所有文件名,但我们还需要驼峰案例"要求"语句。

因此任何任意的require语句都应该像这样改变:

// before
var PurchaseProgressBar = require('src/js/Shared/modules/ProgressBar');
// after - camel cased each part of the path
var PurchaseProgressBar = require('src/js/shared/modules/progressBar');

到目前为止,我们有一个几乎的sed脚本:

sed -e "/require/ s=\b\(.\)=\l\1=g"

但这产生的是:

//  "var PurchaseProgressBar" was also changed! but shouldn't be
var purchaseProgressBar = require('src/js/shared/modules/progressBar');

我们如何使这个sed脚本(或其他一些方法)只发布在require调用中的文本?

1 个答案:

答案 0 :(得分:2)

如果您要更改的每个字母都遵循/(即没有要求路径以Src或其他东西开头),则可以区分要更改的行的部分:

sed -e "/require/ s=\/\b\(.\)=/\l\1=g"

这适用于我的样本输入。

我刚试过一个变体来允许单引号而不是模式中的斜杠。如果原始包含"需要(' Src / js / Shared / modules / ProgressBar')"

sed -e "/require/ s=\(['\/]\)\b\(.\)=\1\l\2=g"