sed/awk oder anderen: one-liner, die zum Inkrementieren einer Zahl von 1 halten Sie Abstand Zeichen

BEARBEITEN: ich weiß nicht im Voraus, auf die "Spalte" meine Ziffern sind dabei, und ich hätte auch gern einen one-liner. Anscheinend sed nicht rechnen, also vielleicht eine Einzeiler-Lösung auf Basis der awk?

Ich habe einen string: (beachten Sie den Abstand)

eh oh    37

und ich möchte es werden:

eh oh    36

(so will ich weiterhin Abstand)

Mit awk ich nicht finden, wie es zu tun, so weit ich habe:

echo "eh oh   37" | awk '$3>=0&&$3<=99 {$3-- } {print}'

Aber das gibt:

eh oh 36

(der Abstand Zeichen, wo verloren, weil das Feld-Trennzeichen ' ')

Gibt es eine Möglichkeit, Sie zu Fragen awk etwas wie "drucken" die Ausgabe mit der exakt gleichen Feld-Separatoren, als die Eingabe hatte"?

Dann habe ich versucht, noch etwas anderes, mit awk ist sub(..,..) Methode:

' sub(/[0-9][0-9]/, ...) {print}'

aber keine Zigarre noch: ich weiß nicht, wie auf der regexp und rechnen auf es im zweiten argument (das ich Links mit " ... " für jetzt).

Dann habe ich versucht mit sed, aber hängengeblieben ist nach diesem:

echo "eh oh   37" | sed -e 's/\([0-9][0-9]\)/.../' 

Kann ich rechnen von sed mit einer Referenz auf die übereinstimmenden Ziffern und die Ausgabe nicht ändern, die Anzahl der Abstände Zeichen?

Beachten Sie, dass es in Bezug auf meine Frage bezüglich Emacs und wie Sie dies für einige (große) Emacs-region (mit einem replace-region-mit Emacs ist shell-command-on-region), aber es ist nicht eine identische Frage: diese ist speziell über, wie "Räume" beim arbeiten mit awk/sed/etc.

Ich weiß, das wäre einfacher mit perl - können Sie split geben Sie die Trennzeichen als auch die Felder.
Sie verwalten können diese in awk durch die völlig ignoriert die Feld-Aufteilung, und nur tun, einige regex-Sachen auf $0, aber es ist irgendwie unelegant. Ist perl eine option?
sicher, Perl ist eine option... Aber ich bin interessiert in die fugly awk-version auch 🙂

InformationsquelleAutor SyntaxT3rr0r | 2010-04-21

Schreibe einen Kommentar