PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Text abkürzen



JDieskau
07-07-2004, 06:20
Also ich möchte in der Bash einen langen Text abkürzen. Also es sollen nur, sagen wir mal, die ersten 120 Zeichen angezeigt werden. Wie kann ich das aber am einfachsten realisieren? Ich hab einfach keine Idee :(

peschmae
07-07-2004, 09:42
Mit cut etwa?
Mit sed liesse sich sowas natürlich auch anstellen.

MfG Peschmä

JDieskau
07-07-2004, 10:39
Mit cut etwa?
Mit sed liesse sich sowas natürlich auch anstellen.

MfG Peschmä
Ja danke. Cut ist wohl das beste. Nun aber ein anderes Problem.
Wenn ich in der Konsole "echo $COLUMNS" eingebe gibts keine Probleme. Mach ich das aber in einem Shellscript dann gehts nicht. Warum nicht?

Ich habe mir das hier ausgedacht:


if [ $1 = "--search" ]
then
if [ "$#" = 1 ]
then
echo -e " $(grep "§84=" ~/.jdcvs/lang/$lang | sed s/§84=//g)\n"
exit
fi
if [ -n $COLUMNS ]
then
echo -e "$discrz $(grep "§82=" ~/.jdcvs/lang/$lang | sed s/§82=//g) '$2':\n"
grep "$2" ~/.jdcvs/discr | cut -b 0-$COLUMNS
echo -e ""
exit
else
echo -e "$discrz $(grep "§82=" ~/.jdcvs/lang/$lang | sed s/§82=//g) '$2':\n"
grep "$2" ~/.jdcvs/discr | cut -b 0-80
echo -e ""
exit
fi
fi
Kann mir da auch wer weiterhelfen?

EDIT: Gleich noch eine andere Frage. Manchmal kommen ja da mehrere Ausgaben, hinter jeder soll dann aber ein '...' damit man weiß es geht noch weiter. Ich würde dann COLUMNS - 3 mit expr oder so rechenen, aber wie mach ich das nun?

peschmae
07-07-2004, 15:30
Was geht da genau nicht?

MfG Peschmä

JDieskau
07-07-2004, 16:06
Was geht da genau nicht?

MfG Peschmä
Naja, ein "echo $COLUMNS" in der Konsole bringt die richtige Ausgabe - also die Breite der Konsole.
Aber das gleiche "echo $COLUMNS" bringt in einem Bash Script keine Ausgabe - also einfach nix. Joa, und das ist mein Problem ;) :D

Als zweites wollte ich das hinter jeder Ausgegeben Zeile ein "..." erscheint. Was ja leider auch nicht so einfach zu realisieren ist :(

peschmae
07-07-2004, 19:20
Ach so - wusste ich gar nicht. Hab mal was aus der Gentoo-Bugdatabase geklaut:


#!/bin/bash

ROWS=$(stty -a | grep rows | awk '{ print $5 }' | sed s/\;//)
COLS=$(stty -a | grep rows | awk '{ print $7 }' | sed s/\;//)
echo $ROWS
echo $COLS


MfG Peschmä

JDieskau
08-07-2004, 10:59
Ach so - wusste ich gar nicht. Hab mal was aus der Gentoo-Bugdatabase geklaut:


#!/bin/bash

ROWS=$(stty -a | grep rows | awk '{ print $5 }' | sed s/\;//)
COLS=$(stty -a | grep rows | awk '{ print $7 }' | sed s/\;//)
echo $ROWS
echo $COLS


MfG Peschmä
Danke :)
Aber wie ich da jetzt hinter jeder Zeile drei Punkte (...) hinbekomme weißt du auch nicht, oder?

Claudine
10-07-2004, 20:49
Danke :)
Aber wie ich da jetzt hinter jeder Zeile drei Punkte (...) hinbekomme weißt du auch nicht, oder?

; echo ... # hinten dranhängen

JDieskau
10-07-2004, 22:59
; echo ... # hinten dranhängen
Das wäre nicht die Lösung, da wenn es mehrere Einträge gibt nur der letzte die 3 ... hätte ;)

Aber ich habe gerade was feines entdeckt: fmt
Hier: http://www.easylinux.de/Artikel/ausgabe/2004/06/074-shell-tipps/
Damit kann man lange texte abtrennen, und zwar nicht irgendwo, sondern genau bei einem leerzeichen - das wäre nicht schlecht. Nun brauch ich aber nur die erste Zeile.

Also sowas wie tail -n 1 die letzte Zeile ausgibt, brauch ich das er die erste Zeile aufgibt, geht das?

Claudine
11-07-2004, 08:13
Also sowas wie tail -n 1 die letzte Zeile ausgibt, brauch ich das er die erste Zeile aufgibt, geht das?

ls -al | awk 'NR == 1 {print $0}'

JDieskau
11-07-2004, 11:04
ls -al | awk 'NR == 1 {print $0}'
Merci! Danke, das ist die Lösung... :)

ThorstenS
11-07-2004, 20:31
Also sowas wie tail -n 1 die letzte Zeile ausgibt, brauch ich das er die erste Zeile aufgibt, geht das?

head ist das Gegenstück zu tail