在特定字串後添加多行字串

在特定字串後添加多行字串

我試圖在找到特定字串後在文件中插入多行字串。我已經搜索並嘗試了很多選項,但沒有一個會返回我期望的結果。

這是我要編輯的區塊:

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express(); //After this line I want to insert several lines

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

我想插入的行的範例:

function x (test){
    console.log("TEST");
}

所以最終文件應該如下所示:

var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var log = require("cf-nodejs-logging-support");

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

function x (test){
    console.log("TEST");
}

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;

我嘗試過的潛在解決方案之一是以下程式碼區塊,但我無法讓它插入包含空格的多行:

@echo off
setlocal enabledelayedexpansion
ren in.txt in.tmp
set p=
for /f %%a in (in.tmp) do (
if "%%a"=="5" if "!p!"=="var app = express();" Echo 4 >> in.txt
Echo %%a >>in.txt
set p=%%a
)
del in.tmp

我非常希望有一個不需要安裝任何額外軟體的解決方案。但如果沒有其他辦法的話,這也可以。我目前使用的是 Windows 7 PC,但此腳本也應該適用於 Windows 10。

我的整個腳本(比我在這裡展示的要大得多)被編寫為簡單的批次檔。

答案1

在提出以下方法之前,我經歷了許多過於複雜的方法:

@echo off

set "txt=C:\Your\Text\File.txt"
set "old=var app = express();"

setlocal enabledelayedexpansion
for /f "delims=" %%A in ('type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" ') do (
    set "line=%%A"
    set "line=!line:*]=!"
    if not "!line!" == "!old!" >>"%txt%" echo(!line!
    if "!line!" == "!old!" (
        echo(!old!
        echo.
        echo(function x ^(test^)^{
        echo(   console.log^("TEST"^);
        echo(^}
    )>>"%txt%"
)

endlocal

它實際上非常簡單 - 這裡唯一奇特的部分是位,'type "%txt%" ^| find /v /n "" ^& break ^> "%txt%" '因為它使我們不必創建新文件,並且它還要求我們!line!在將其寫回文件之前從變量的開頭刪除行計數內容(這就是它set "line=!line:*]=!"所做的)。

除此之外,這只是查看所有行,如果不是,var app = express();則將行原樣回顯到文件中;如果線 var app = express();相反,它會回顯var app = express();後面跟著一個空白行 ( echo.),然後是您要新增的行。另一件要記住的事情是轉義('s、)'s 和}'s。

]如果腳本中的其他地方有 ' ,則可能會出現問題,因此如果您有任何疑問,請告訴我。

相關內容