2010-12-02 2 views
0

Ich habe Datei über 5,5 GB Größe. Ich möchte eine bestimmte Zeile der Datei anzeigen. Sagen wir die Zeilennummer 100001 und ich möchte diese Zeile durch meine eigenen Texte ersetzen. Wie erreiche ich diese Operation mit dem Unix-Befehl? Ich kann die Datei nicht im Editor anzeigen. Ich kann nicht geöffnet werden und das ist eine Remote-Maschine.UNIX ersetzen bestimmte Zeile in Datei

Kann jemand eine Idee teilen, diese Zeile zu sehen und sie durch einige andere Texte zu ersetzen?

Thanks :)

+0

Wenn es nicht geöffnet werden kann, haben Sie keine Hoffnung, es sei denn, ich missverstanden Ihre Frage. – Actorclavilis

+0

Wenn Sie wissen, wie diese Zeile aussieht, können Sie 'sed' verwenden, um nach dieser Zeile der Datei zu suchen und sie zu ersetzen. Aber wenn die Datei nicht geöffnet werden kann, wird 'sed' nicht viel nutzen. – vpit3833

+0

Wahrscheinlich kann wegen der Dateigröße nicht geöffnet werden. Außerdem ist es remote und kann daher nur per SSH darauf zugreifen. – Ruel

Antwort

1

Wenn Sie die gleiche Länge wie der Text ersetzt, die Linie an Ort und Stelle und die Ersatzdaten ändern mögen Sie dd zu (vorsichtig!) Verwenden können, überschreibt die Datei Teil.

# getting the byte offsets of the start and length of the line 
perl -ne '$s+=length; if ($.==100001) {print "$s + ",length,"\n"; exit}' bigfile 

# writing over the existing data 
echo 'new line' | dd of=bigfile bs=1 seek=$start count=$length conv=notrunc 

Wenn die Ersatzdaten ist eine andere Länge, und es ist nicht ganz am Ende der Datei, haben Sie keine andere Wahl, als die Datei neu zu schreiben. Dies erfordert, genügend Speicherplatz zu haben, um sowohl bigfile als auch eine Kopie davon zu behalten!

# The old file is renamed to bigfile.bak; a new bigfile is written with changes. 
sed -i.bak -e '100001 c \ 
new line' bigfile