4 Stimmen

Lesen Sie Zeichen aus einer Textdatei mit Bash

Weiß jemand, wie ich die ersten zwei Zeichen aus einer Datei in einem Bash-Skript lesen kann? Die betreffende Datei ist tatsächlich ein I/O-Treiber, der keine Zeilenumbrüche enthält und praktisch unendlich lang ist.

2 Stimmen

Dies ist eine Programmierfrage, aber ich denke, Sie erhalten möglicherweise eine schnellere Antwort auf Serverfault.com. Diese Jungs kennen sich mit dem Skripting aus.

11voto

Vinko Vrsalovic Punkte 252104

Das read-Builtin unterstützt den -n-Parameter:

$ echo "Zwei Zeichen" | while read -n 2 i; do echo $i; done
Zw
ei
Ze
ic
he
n

$ cat /proc/your_driver | (read -n 2 i; echo $i;)

0 Stimmen

Könnte nicht so funktionieren, wie Sie möchten, wenn eine der ersten beiden Bytes in $IFS liegt, wird dd dies tun

0 Stimmen

Wahr, aber soweit ich weiß, gibt es keinen anderen BASH-Weg, um dies zu tun.

1 Stimmen

Wie auch immer, solange Sie einen einzigen Namen verwenden, sollte es keine Probleme geben, da $IFS ins Spiel kommt, wenn Sie die Zeile in mehr als einen Namen (oder eine Variable) aufteilen.

4voto

shodanex Punkte 14453

Ich denke, dass dd if=your_file ibs=2 count=1 den Trick tun wird.

Wenn man es mit strace ansieht, stellt man fest, dass tatsächlich zwei Bytes aus der Datei gelesen werden. Hier ist ein Beispiel, bei dem aus /dev/zero gelesen und in hd angezeigt wird :

dd if=/dev/zero bs=2 count=1 | hd
1+0 Datensätze gelesen
1+0 Datensätze geschrieben
2 Bytes (2 B) kopiert, 2,8497e-05 s, 70,2 kB/s
00000000  00 00                                             |..|
00000002

0 Stimmen

Ja, dieser ist robuster als read -n für Binärdateien (besonders für Bytes innerhalb von IFS). V=dd if=/dev/whatever bs=2 count=1 2>/dev/null

1voto

Rob Wells Punkte 35303

Hallo,

Warum nicht od verwenden, um den Abschnitt zu erhalten, den du benötigst?

od --read-bytes=2 my_driver

Bearbeiten: Du kannst head dafür nicht verwenden, da der head Befehl auf stdout druckt. Wenn die ersten beiden Zeichen nicht druckbar sind, siehst du nichts.

Der od Befehl hat mehrere Optionen, um die Bytes nach Belieben zu formatieren.

0 Stimmen

Diese Lösungen würden auf vielen Systemen funktionieren, aber ich verwende ein eingebettetes System, auf dem weder head noch od installiert sind.

0 Stimmen

Es fehlt dir der Kopf, aber du hast alle Möglichkeiten zu lesen? Meine eingebettete Umgebung macht das Gegenteil :) Und oft setze ich dd in jedes eingebettete System, das ich baue.

1voto

ghostdog74 Punkte 305138
echo "Zwei Zeichen" | sed 's/../&\n/g'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X