2017-12-15 5 views
1

Die Dokumentation für cut (cf info cut) sagt:Insert Ausgang-Begrenzer mit Unix schneiden * -c *

--output-delimiter=OUTPUT_DELIM_STRING

With `-f`, output fields are separated by OUTPUT_DELIM_STRING. 
The default with `-f` is to use the input delimiter. When using 
`-b` or `-c` to select ranges of byte or character offsets (as 
opposed to ranges of fields), output OUTPUT_DELIM_STRING between 
non-overlapping ranges of selected bytes. 

Mein Verständnis ist, dass also diese:

echo abcdefghi | cut --output-delimiter=',' -c 1-2,5-6 

Sollte geben ab,ef. Aber es druckt abef ...

Wie erziele ich ab,ef? Habe ich die Dokumentation missverstanden?

Bevor sie als Betrogene Schließen Bitte beachten Sie, dass:

  • ich weiß, dass ich awk oder sed oder perl oder bash oder (..) (siehe this similar question with an ugly accepted answer), aber ich bin nach einer Lösung cut verwenden könnte, zumal die Dokumentation sagt, es sollte funktionieren.
  • ich -c verwende und nicht -f
+0

Was ist Ihre Version? 'cut (GNU coreutils) 8.22' erzeugt die gewünschte Ausgabe. – bishop

+0

schneiden (GNU Coreutils) 5.97 auf Red Hat Enterprise Linux Server Version 5.11 –

+0

Das ist wirklich alt. Upgrade empfohlen. – bishop

Antwort

1

In der Version 8.22 wird das Verhalten als erwartet:

$ echo abcdefghi | cut --output-delimiter=',' -c 1-2,5-6 
ab,ef 
$ cut --version 
cut (GNU coreutils) 8.22 
Copyright (C) 2013 Free Software Foundation, Inc. 

Vorausgesetzt, dass Sie die 5.9-Serie verwenden, veröffentlicht offiziell etwa 2006, ich glaube, Wir können daraus schließen, dass dies ein Fehler in dieser Serie ist. Angesichts der Tatsache, dass Sie auf RedHat sind, hat Ihre Version wahrscheinlich Sicherheits-Back-ported, aber nicht Papier geschnitten Bugs wie dieser.

Lösung wäre zu aktualisieren, oder verwenden Sie ein alternatives Tool, wie Sie hingewiesen haben.