Найдите строку и отредактируйте ее - PullRequest
0 голосов
/ 12 июля 2009

Я опубликовал еще один на этом ,, но мне пришлось очень много редактировать ...

Что в основном заключается в том, что пакет (возможно, включая VBScript) может найти строку 29 в txtfile ... он должен редактировать эту строку.

Если строка 29 выглядит следующим образом: 'option = 21', она должна измениться на 'option = 22'

проблема в том, что эта строка находится больше в файле. так что надо просто отредактировать строку 29 ...

Как к ???

[пожалуйста, никаких пользовательских программ ;;; это должен делать каждый пользователь, не устанавливая что-либо в порядке.]

Ответы [ 3 ]

3 голосов
/ 12 июля 2009

Обычно это не то, что вы обычно делаете в пакетном режиме, но это довольно просто:

@echo off
setlocal enableextensions enabledelayedexpansion

rem the input file
set inputfile=file.txt

rem temporary file for output, we can't just write into the
rem same file we're reading
set tempfile=%random%-%random%.tmp

rem delete the temporary file if it's already there
rem shouldn't really happen, but just in case ...
copy /y nul %tempfile%

rem line counter
set line=0

rem loop through the file
for /f "delims=" %%l in (%inputfile%) do (
    set /a line+=1
    if !line!==29 (
        rem hardcoded, at the moment, you might want to look
        rem here whether the line really starts with "options"
        rem and just put another number at the end.
        echo option=22>>%tempfile%
    ) else (
        echo %%l>>%tempfile%
    )
)

del %inputfile%
ren %tempfile% %inputfile%

endlocal

Он должен указывать вам общее направление, если вы хотите адаптировать его.

0 голосов
/ 12 июля 2009

вот VBScript

Set objFS = CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file.txt"
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
    linenum = objFile.Line
    strLine = objFile.ReadLine
    If linenum = 29 Then
        strLine = Replace(strLine,"option=21","option=22")
    End If
    WScript.Echo strLine
Loop    

как использовать:

c:\test> cscript /nologo myscript.vbs > newfile
c:\test> ren newfile file.txt
0 голосов
/ 12 июля 2009

Я вижу, вы просите сценарий vb,
Используя AWK, получилось бы что-то вроде этого,
может быть, это поможет вам код vb.

awk '{if (FNR == 29) {gsub (/ option = 21 /, "option = 22"); print} else {print $ 0;}} 'input.txt> output.txt

Еще не пробовал, поэтому могут быть небольшие глюки ...

  1. FNR=29 будет проверять обработку gsub только в строке 29
    • gsub заменит все option=21 вхождений в строке на option=22
    • другие строки будут проходить через
...