
Ich möchte damit tac
eine Textdatei zeichenweise umkehren. Auf der Infoseite für Coreutils habe ich ein Beispiel gefunden, das lautet: #Eine Datei zeichenweise umkehrentac -r -s 'x\|[^x]'
Beim Ausführen scheint jedoch tac -r -s
die Standardeingabe zu öffnen, anstatt die Datei zu drucken. Was bedeutet das 'x\|[^x]'
und was soll ich tun?
Mir ist auch aufgefallen, dass die Ausgabe für tac [file]
und tac -r [file]
gleich ist und sie gleich sind wie cat [file]
. Ich kann die Zeichen-für-Zeichen-Umkehr immer noch nicht herausfinden.
Antwort1
Um eine Datei mithilfe von Zeichen für Zeichen umzukehren tac
, verwenden Sie:
tac -r -s 'x\|[^x]'
Dies ist dokumentiert ininfo tac
:
# Reverse a file character by character. tac -r -s 'x\|[^x]'
-r
bewirkt, dass das Trennzeichen als regulärer Ausdruck behandelt wird.-s SEP
verwendet SEP
als Trennzeichen. x\|[^x]
ist ein regulärer Ausdruck, der mit jedem Zeichen übereinstimmt (sowohl mit als x
auch mit denen, die nicht mit x
) .
$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile
ihg
fed
cba%
$
tac file
ist nicht dasselbe wie, cat file
es sei denn, file
es hat nur eine Zeile. tac -r file
ist dasselbe wie, tac file
weil das Standardtrennzeichen ist \n
, was dasselbe ist, wenn es als regulärer Ausdruck behandelt wird und nicht.
Antwort2
Wenn Sie sich keine Sorgen machen über dieLF-Charakter(siehe die Kommentare von mosvy), dann ist die Verwendung viel effizienter rev
als tac -r -s 'x\|[^x]'
die Weiterleitung an , tac
falls erforderlich.
$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba
Diese Lösung ist wesentlich günstiger, tac -r -s 'x\|[^x]'
da reguläre Ausdrücke die Dinge tendenziell erheblich verlangsamen.