我想使用'use strict';
var express = require('express');
var path = require('path');
var app = express();
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname+'/index.html'));
});
app.get('/search', function(req,res){
res.send('search route');
});
app.get('/search/*', function(req, res, next) {
res.setHeader('content-type', 'plain/text');
var type = typeof(res);
var reqParams = req.params;
res.send(type);
});
var server = app.listen(process.env.PORT || 3000, function(){
console.log('app listening on port ' + process.env.PORT + '!');
});
module.exports = server;
替换完整源文件树中特定文本的每个出现。我尝试过以下方法:
sed
但它似乎无法正常工作,我认为我的sed cmd不正确。
我该怎么做?
问题是,替换不会发生。
我尝试了这个:$ grep -rlI name2port\(\"Wan1\"\) . --exclude-dir=.svn --exclude=*.vxs | xargs sed -i 's/name2port\(\"Wan1\"\)/T_PORT_ID_WAN1/g'
但事实证明,$ sed -i 's/name2port\(\"Wan1\"\)/T_PORT_ID_WAN1/g' ./rtos_core/jpax_switch/api/src/nms/switch_l3_route.c
的出现不会被替换。
答案 0 :(得分:3)
sed
默认使用BRE(基本正则表达式),由于历史原因 - 对于习惯于现代正则表达式的人来说,令人惊讶的是 - 需要< em>转义 某些元字符,以便被识别出来。
在BRE中,(
和)
是普通(文字)字符,只有在\
转义时才会变得特殊
因此,要匹配文字name2port("Wan1")
,请在BRE中使用该文字 (假设您也不需要\
- escape {{1实例):
"
如果您不关心可移植性,可以使用sed -i 's/name2port("Wan1")/T_PORT_ID_WAN1/g' ./rtos_core/jpax_switch/api/src/nms/switch_l3_route.c
(或-r
将有限的可移植性用于macOS,但{ {1}}不起作用),然后启用ERE(扩展正则表达式),其语法和功能更有可能按预期工作:
-E
请注意文字-i
和sed -r -i 's/name2port\("Wan1"\)/T_PORT_ID_WAN1/g' ./rtos_core/jpax_switch/api/src/nms/switch_l3_route.c
现在做需要(
- 转义,以免被解释为包含捕获组。
在这种特殊情况下,BRE比ERE需要更少的逃逸;但总的来说,情况正好相反。