Wie suche und ersetze ich eine Zeichenfolge in einer Datei mit cmd oder PowerShell?

10

Ich habe eine .txt-Datei, in der ich die Zeichenfolge ersetzen möchte aaa mit bbb.

Ich habe den folgenden PowerShell-Code ausprobiert:

Get-Content c:\1.txt | ForEach-Object { $_ -replace "aaa", "bbb" } | Set-Content c:\1.txt

Ich bekomme den Fehler 1.txt wird von einem anderen Prozess verwendet. Was mache ich falsch?

Elad Benda
quelle

Antworten:

16
(get-content c:\1.txt) | foreach-object {$_ -replace "prod", "qa1"} | set-content c:\1.txt

Die Klammern herum Get-Content Vergewissern Sie sich, dass der Vorgang Get abgeschlossen ist, bevor der Vorgang Set beginnt. Andernfalls würden beide Funktionen gleichzeitig versuchen, auf die Datei zuzugreifen.

Elad Benda
quelle
0

Ich frage mich, wie es dazu kommt, dass ich, wenn ich ein nützliches Tool für jemanden erstelle, der dringend eine Zeichenfolge in einer Datei ersetzen und diese auf eine kostenlose Upload-Site hochladen muss, die kostenlos heruntergeladen werden kann, tatsächlich wieder ein kostenloses Tool, wie es kommt das ich ein spammer werde ??? Ich bin ein sehr angesehener, alter Programmierer in meinem Land, niemand hat mich jetzt als Spammer bezeichnet. Jetzt muss ich den Quellcode hochladen, um mein Ansehen zu erhalten ...

Jetzt wurde mir klar, dass COMMUNITY ein Roboter ist und das ist in Ordnung für mich ...

Source ist mit FPC kompilierbar.

Program ReplaceString;
var
  fs,fd:file of char;
  rdchar:char;
  cnt1:byte;
  ocur:longint;
  instr,outstr,tempstr:string;

function fileexists(filename:string):boolean;
var
  f:file;
begin
  {$I-} assign(f,FileName);reset(f);close(f); {$I+}
  fileexists:=(ioresult=0) and (filename<>'');
end;

procedure chkstr;
var
  tmp1:char;
  numread,cnt2:byte;
begin
  numread:=1;
  tempstr[1]:=rdchar;
  repeat
    read(fs,tmp1);
    inc(numread);
    tempstr[numread]:=tmp1;
  until (numread=length(instr)) or (instr[numread]<>tempstr[numread]);
  if (numread<length(instr)) or (instr[numread]<>tempstr[numread]) then
    for cnt2:=1 to numread do begin
      tmp1:=tempstr[cnt2];
      write(fd,tmp1);
    end else begin
      for cnt2:=1 to length(outstr) do begin
        tmp1:=outstr[cnt2];
        write(fd,tmp1);
      end;
      inc(ocur);
      write('Occurrences: ',ocur);
      for cnt2:=1 to 20 do write(chr(8));
    end;
end;

begin
  writeln('File string replacer v.1.0 for WIN32 by Rares Atodiresei (P)2018');
  if paramcount<>3 then begin
    writeln('Usage: Repstr32.exe <infile> <target string> <replacement string>');
    halt(1);
  end;
  if not fileexists(paramstr(1)) then begin
    writeln('File ',paramstr(1),' does not exist.');
    halt(1);
  end;
  writeln;
  ocur:=0;
  write('Searching...');
  for cnt1:=1 to 15 do write(chr(8));
  instr:=paramstr(2);
  outstr:=paramstr(3);
  assign(fs,paramstr(1));reset(fs);
  assign(fd,'_'+paramstr(1));rewrite(fd);
  while not eof(fs) do begin
    read(fs,rdchar);
    if rdchar=instr[1] then chkstr else write(fd,rdchar);
  end;
  close(fd);close(fs);
  if ocur=0 then begin
    write('Target string not found.');
    for cnt1:=1 to 25 do write(chr(8));
    erase(fd);
  end else begin
    erase(fs);rename(fd,paramstr(1));
  end;
  writeln;writeln;writeln('Done.');
end.
Rares
quelle
Dies scheint eine Art Pascal zu sein, nicht Powershell.
RalfFriedl