Ich führe die folgenden 2 sed
Befehle aus. Der erste fügt Zeilenvorschubzeichen hinzu, wo ich sie haben möchte, der zweite fügt Zeilenvorschubzeichen hinzu, wo ich sie haben möchte, ABER fügt am Ende der Datei ein zusätzliches hinzu, wo es vorher kein Zeichen gab.
sed -e 's|\<LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_1.xml > ${XMLDIR}/statement_tmp_2.xml
sed -e 's|\</LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_2.xml > ${XMLDIR}/statement_tmp_3.xml
Die Verwendung od -c
aller 3 Dateien führt zu folgender Ausgabe.
statement_tmp_1.xml (nein \n
am Ende der Datei)
1314700 T A T E M E N T > < / L I S T _
1314720 G _ S T A T E M E N T > < / G _
1314740 S E T U P > < / L I S T _ G _ S
1314760 E T U P > < / A R X S G P O >
1314777
statement_tmp_2.xml (nein \n
am Ende der Datei)
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > < / G
1314740 _ S E T U P > < / L I S T _ G _
1314760 S E T U P > < / A R X S G P O >
1315000
statement_tmp_3.xml ( \n
am Ende der Datei - woher kommt sie?)
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > \n < /
1314740 G _ S E T U P > < / L I S T _ G
1314760 _ S E T U P > < / A R X S G P O
1315000 > \n
1315002
Ich verwende AIX 5.3
Grundsätzlich möchte ich, dass das Hinzufügen der zusätzlichen Elemente gestoppt \n
wird oder dass eine Möglichkeit zum Entfernen gefunden wird.
s|...|&\n|
genauso gut hätten verwenden können ?\n
in der rechten Seite ist nicht tragbar.perl
anderes Tool, das mit Binärdaten umgehen kann.\<LF>
ist die traditionelle und POSIX-Methode, um ein LF-Zeichen hinzuzufügen.\n
würde normalerweise einn
Zeichen in etwas anderem als GNU ersetzensed
.Antworten:
Sie sollten sich glücklich
sed
schätzen, dass AIX diese fehlenden Zeilenumbrüche hinzugefügt hat.Eine nicht leere Datei, die nicht mit einem Zeilenumbruch endet, ist keine Textdatei (zumindest gemäß der POSIX-Definition einer Textdatei), da eine Textdatei Zeilen enthalten soll und Zeilen ein (nicht zu lange) Folge von Zeichen, die durch ein Zeilenumbruchszeichen abgeschlossen werden, sodass das Verhalten von Textdienstprogrammen wie
sed
auf diesem nicht spezifiziert ist und in der Praxis von Implementierung zu Implementierung variiert.Einige
sed
Implementierungen hätten diese unechten Zeichen nach der letzten Zeile verworfen.AFAIK,
xml
Dateien sind als Textdateien gedacht, das heißt, sie wurdensed
nur für Sie repariert.Wenn Sie möchten, dass diese Datei nicht mit einem Zeilenumbruch endet, können Sie auch
perl
andere Tools verwenden, die mit Nicht-Text-Daten umgehen können.quelle
sed
Ausgabe in ein anderes Standard-Unix-Dienstprogramm umgeleitet wird . Ehrlich gesagt, habe ich nicht bemerktsed
habe dies für Jahre , seit Bourne - Shell - Befehl Substitutionen wie$(sed 's/bas/replac/' <<<'basement')
verstohlen die endgültige Newline trimmen, wenn es einen gibt. Aber es gibt Zeiten, in denen Sie es definitiv nicht wollen. zB X-Text in der Zwischenablage bearbeiten mitsed
. Zu Ihrer Information, GNU sed fügt, falls verfügbar, keinen abschließenden Zeilenumbruch hinzu, wenn Siep
ihn mit der-n
Option verwenden, wie in dieser SE-Antwort beschrieben .So entfernen Sie den letzten Zeilenumbruch aus einer Datei
dd
:Um zu testen, ob eine Datei mit einem Zeilenumbruch endet, können Sie Folgendes verwenden:
Und um die Dateigröße in Bytes zu erhalten, verwenden Sie:
quelle
Gemäß dieser AIX Handbuch IBM
tail
tut-r
everse - das ist ziemlich cool aussieht. Solange sich Ihre Datei unter 20 KB befindet, sollte Folgendes funktionieren:quelle