Ich habe ein Dokument, dessen Zeilen durch "\ t \ n" getrennt sind. Datensätze werden entweder durch "\ t" oder durch "\ n" getrennt.So begrenzen Sie Datei mit " t n" auf einem Mac
Normalerweise sollte dies eine straigtforward awk Abfrage sein:
BEGIN {
RS='\t\n';
}
{
print;
print "Next entry:";
}
jedoch auf einem Mac, nicht reguläre Ausdrücke scheinen unterstützt werden (? Vielleicht richtig ich mache etwas nicht) Also habe ich versucht, ; Dies wird jedoch als RS='\t | \n'
interpretiert. Ähnliche Probleme awk von der Kommandozeile ausgeführt wird:
awk 1 RS='\t\n' ORS='abc' input > output
ersetzt die \t
's, läßt aber die \n
' s sein.
Nächster Versuch: mit tr
. Dies schlägt offensichtlich bei einer Sequenz von mehr als einem Zeichen fehl - da \t
und \n
beide einzeln in den Zeilen verwendet werden.
Next:
sed -e '/\t\n/s//NextEntry:/g' input > output
jedoch nicht funktioniert. Die Eingabe einer beliebigen ASCII-Zeichenfolge anstelle von \ t \ n funktioniert.
Lesen Sie das Handbuch. Es besagt, dass \t
in sed-Strings nicht unterstützt wird. Fair genug
sed -e '/\x9\xa/s//abc/' input > output
Funktioniert immer noch nicht. Idee: Verwenden Sie tr
, um \t
und \n
durch Zeichen zu ersetzen, die in der Eingabedatei unbenutzt sind, verwenden Sie sed
, um sie zu ändern, was ich will, und dann tr
, um die restlichen Zeichen zurück zu ändern, was sie sein sollten.
tr: Illegal byte sequence
Es stellte sich heraus, dass f6
Charakter macht tr
einfach total fehl.
Ging durch die Vorschläge in Sed not recognizing \t instead it is treating it as 't' why?. Das könnte funktionieren, um Ausgabezeichenfolgen zu ersetzen (mit Ausnahme der "Einfügen-Registerkarte in Eingabeaufforderung über STRG + V" Vorschlag - die Shell nur diese Paste zurückgewiesen.), Schien aber nicht in meinem Fall zu helfen.
Vielleicht liegt es daran, dass es ein Mac ist? Vielleicht liegt es daran, dass das der gesuchte Text ist, den ich nicht ersetzen möchte? Vielleicht ist es die Kombination mit \n
?
Haben Sie noch weitere Vorschläge?
UPDATE:
fand ich Thread How can I replace a newline (\n) using sed?. Anscheinend bin ich nicht in der Lage, eine \n
durch die Schnur "abc" unter Verwendung der Vorschläge in diesem Faden sogar zu ersetzen.
EDIT: Hex Leiter der Quelldatei:
5a 20 4e 4f 09 0a 41 53 20 4f 46 20 30 31 2d 30
34 2d 30 35 20 45 4d 50 4c 4f 59 45 45 0a 47 52
4f 55 50 09 48 49 52 45 20 44 41 54 45 09 53 41
4c 41 52 59 09 4a 4f 42 20 54 49 54 4c 45 09 0a
4a 4f 42 20 4c 45 56 45 4c 0a 53 45 52 49 45 53
09 41 50 50 54 20 54 59 50 45 09 0a 50 41 59 20
53 54 41 54 55 53 0a f6
Können Sie bitte eine Kopie Ihrer * "unglücklichen" * Datei bereitstellen? –
@MarkSetchell OK, ich habe den Kopf hochgeladen. – Alex