Linux-Textausschnitt

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Willkommen im Linux-Textausschnitt-Labor (Linux Text Cutting Lab). In diesem Labor lernen Sie, wie Sie den cut-Befehl in Linux verwenden, um bestimmte Teile von Textdateien zu extrahieren. Der cut-Befehl ist ein leistungsstarkes Textverarbeitungswerkzeug, das es Ihnen ermöglicht, Abschnitte aus jeder Zeile von Dateien oder aus gepipeten Daten zu extrahieren.

Sie werden lernen, wie Sie verschiedene Optionen des cut-Befehls verwenden, um Text basierend auf Trennzeichen und Zeichenpositionen zu extrahieren. Diese Fähigkeit ist besonders nützlich, wenn Sie mit strukturierten Textdateien wie CSV-Dateien, Protokolldateien oder jeder Datenquelle arbeiten, die einem konsistenten Format folgt.

Am Ende dieses Labs können Sie Textdaten in Linux-Umgebungen effizient extrahieren und manipulieren. Dies ist eine grundlegende Fähigkeit für Systemadministration, Datenverarbeitung und Automatisierungsaufgaben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/cut("Text Cutting") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-271259{{"Linux-Textausschnitt"}} linux/cut -.-> lab-271259{{"Linux-Textausschnitt"}} linux/grep -.-> lab-271259{{"Linux-Textausschnitt"}} end

Grundlegende Verwendung des cut-Befehls verstehen

In diesem Schritt lernen Sie die grundlegende Verwendung des cut-Befehls. Der cut-Befehl in Linux wird verwendet, um Abschnitte aus jeder Zeile von Dateien oder aus gepipeten Daten zu extrahieren.

Beginnen wir damit, eine einfache Datendatei zu erstellen, mit der wir arbeiten können:

cd ~/project
echo "name:age:city:occupation" > data/users.txt
echo "Alice:25:New York:Engineer" >> data/users.txt
echo "Bob:30:San Francisco:Designer" >> data/users.txt
echo "Charlie:22:Chicago:Student" >> data/users.txt
echo "Diana:28:Boston:Doctor" >> data/users.txt

Die obigen Befehle erstellen eine Datei namens users.txt im Verzeichnis ~/project/data mit fünf Zeilen von durch Doppelpunkte getrennten Werten.

Lassen Sie uns nun den Inhalt dieser Datei untersuchen:

cat data/users.txt

Sie sollten die folgende Ausgabe sehen:

name:age:city:occupation
Alice:25:New York:Engineer
Bob:30:San Francisco:Designer
Charlie:22:Chicago:Student
Diana:28:Boston:Doctor

cut mit einem Trennzeichen verwenden

Die häufigste Art, cut zu verwenden, ist mit einem Trennzeichen, um bestimmte Felder zu extrahieren. Die grundlegende Syntax lautet:

cut -d'delimiter' -f fields file

Dabei:

  • -d gibt das Trennzeichen an
  • -f gibt an, welche Felder extrahiert werden sollen
  • file ist die Eingabedatei

Lassen Sie uns die Namen (erstes Feld) aus unserer Datendatei extrahieren:

cut -d':' -f1 data/users.txt

Dieser Befehl teilt cut mit:

  • : als Trennzeichen zu verwenden (-d':')
  • Das erste Feld zu extrahieren (-f1)
  • Aus der Datei data/users.txt

Sie sollten die folgende Ausgabe sehen:

name
Alice
Bob
Charlie
Diana

Lassen Sie uns nun die Alter (zweites Feld) extrahieren:

cut -d':' -f2 data/users.txt

Ausgabe:

age
25
30
22
28

Mehrere Felder extrahieren

Sie können mehrere Felder extrahieren, indem Sie sie als durch Kommas getrennte Liste angeben:

cut -d':' -f1,3 data/users.txt

Dies extrahiert das erste und dritte Feld (Name und Stadt):

name:city
Alice:New York
Bob:San Francisco
Charlie:Chicago
Diana:Boston

Einen Bereich von Feldern extrahieren

Sie können auch einen Bereich von Feldern mithilfe eines Bindestrichs extrahieren:

cut -d':' -f2-4 data/users.txt

Dies extrahiert die Felder 2 bis 4 (Alter, Stadt und Beruf):

age:city:occupation
25:New York:Engineer
30:San Francisco:Designer
22:Chicago:Student
28:Boston:Doctor

Kombination mit anderen Befehlen

Der cut-Befehl kann mit anderen Befehlen mithilfe von Pipes kombiniert werden. Beispielsweise, um nur die Alter von Personen, die Ingenieure sind, zu extrahieren:

grep "Engineer" data/users.txt | cut -d':' -f2

Ausgabe:

25

Experimentieren Sie mit verschiedenen Feldkombinationen, um sich mit dem Befehl vertraut zu machen.

Ausschneiden nach Zeichenposition

Neben dem Ausschneiden von Feldern basierend auf Trennzeichen kann der cut-Befehl auch Text basierend auf Zeichenpositionen extrahieren. Dies ist nützlich, wenn Sie mit Datenformaten fester Breite arbeiten oder wenn Sie bestimmte Zeichen aus jeder Zeile extrahieren müssen.

Erstellen von Daten fester Breite

Erstellen wir eine neue Datei mit Daten fester Breite, um dieses Feature zu demonstrieren:

cd ~/project
echo "ID  Name      Department  Salary" > data/employees.txt
echo "001 John      IT          75000" >> data/employees.txt
echo "002 Mary      HR          65000" >> data/employees.txt
echo "003 Steve     Sales       85000" >> data/employees.txt
echo "004 Jennifer  Marketing   70000" >> data/employees.txt

Lassen Sie uns nun diese Datei untersuchen:

cat data/employees.txt

Sie sollten sehen:

ID  Name      Department  Salary
001 John      IT          75000
002 Mary      HR          65000
003 Steve     Sales       85000
004 Jennifer  Marketing   70000

Extrahieren nach Zeichenposition

Um Text basierend auf Zeichenpositionen zu extrahieren, verwenden Sie die Option -c gefolgt von den Positionen, die Sie extrahieren möchten. Die Syntax lautet:

cut -c positions file

Lassen Sie uns die Mitarbeiter-IDs (erste 3 Zeichen) aus unserer Datendatei extrahieren:

cut -c1-3 data/employees.txt

Dieser Befehl teilt cut mit, die Zeichen 1 bis 3 aus jeder Zeile zu extrahieren. Sie sollten sehen:

ID
001
002
003
004

Extrahieren bestimmter Zeichen

Sie können auch bestimmte, nicht aufeinanderfolgende Zeichen extrahieren:

cut -c1,5,9 data/employees.txt

Dies extrahiert das 1., 5. und 9. Zeichen aus jeder Zeile:

I N
0 J
0 M
0 S
0 J

Extrahieren von einer bestimmten Position bis zum Zeilenende

Um Zeichen von einer bestimmten Position bis zum Zeilenende zu extrahieren, verwenden Sie einen Bindestrich nach der Positionsnummer:

cut -c5- data/employees.txt

Dies extrahiert die Zeichen von Position 5 bis zum Ende jeder Zeile:

Name      Department  Salary
John      IT          75000
Mary      HR          65000
Steve     Sales       85000
Jennifer  Marketing   70000

Kombinieren der Zeichenpositionsextraktion mit Pipes

Sie können den cut-Befehl mit anderen Befehlen mithilfe von Pipes kombinieren. Beispielsweise, um nur die Abteilungsnamen (Zeichen 13-22) von Mitarbeitern mit einem Gehalt von mehr als 70000 zu extrahieren:

grep -E "[7-9][0-9]000" data/employees.txt | cut -c13-22

Dies sollte die folgende Ausgabe liefern:

IT
Sales

Übungsaufgabe

Versuchen Sie, nur die Namen (Zeichen 5-12) aus der Mitarbeiterdatei zu extrahieren:

cut -c5-12 data/employees.txt

Sie sollten sehen:

Name
John
Mary
Steve
Jennifer

Wie Sie sehen können, ist das Ausschneiden nach Zeichenposition besonders nützlich für die Verarbeitung von Datenformaten fester Breite, bei denen jedes Feld eine bestimmte Anzahl von Zeichen in jeder Zeile einnimmt.

Kombinieren von cut mit anderen Textverarbeitungstools

In diesem Schritt lernen Sie, wie Sie den cut-Befehl mit anderen Linux-Textverarbeitungsbefehlen kombinieren können, um komplexere Datenextraktions- und Manipulationstasks durchzuführen.

Erstellen einer CSV-Datendatei

Zunächst erstellen wir eine CSV (Comma-Separated Values, durch Kommas getrennte Werte)-Datei, mit der wir arbeiten können:

cd ~/project
echo "Date,Product,Quantity,Price,Total" > data/sales.csv
echo "2023-01-15,Laptop,5,1200,6000" >> data/sales.csv
echo "2023-01-16,Mouse,20,25,500" >> data/sales.csv
echo "2023-01-17,Keyboard,15,50,750" >> data/sales.csv
echo "2023-01-18,Monitor,8,200,1600" >> data/sales.csv
echo "2023-01-19,Headphones,12,80,960" >> data/sales.csv

Lassen Sie uns den Inhalt dieser Datei überprüfen:

cat data/sales.csv

Sie sollten sehen:

Date,Product,Quantity,Price,Total
2023-01-15,Laptop,5,1200,6000
2023-01-16,Mouse,20,25,500
2023-01-17,Keyboard,15,50,750
2023-01-18,Monitor,8,200,1600
2023-01-19,Headphones,12,80,960

Kombinieren von cut mit grep

Sie können grep verwenden, um Zeilen zu finden, die bestimmte Muster enthalten, und dann cut verwenden, um bestimmte Felder aus diesen Zeilen zu extrahieren:

grep "Laptop" data/sales.csv | cut -d',' -f3-5

Dieser Befehl sucht zunächst alle Zeilen, die "Laptop" enthalten, und extrahiert dann die Felder 3 - 5 (Menge, Preis und Gesamtbetrag). Sie sollten sehen:

5,1200,6000

Kombinieren von cut mit sort

Sie können sort verwenden, um die Daten basierend auf einem bestimmten Feld zu ordnen:

cut -d',' -f2,4 data/sales.csv | sort -t',' -k2nr

Dieser Befehl extrahiert das Produkt (Feld 2) und den Preis (Feld 4) und sortiert sie dann basierend auf dem Preis in numerischer umgekehrter Reihenfolge. Die Option -t',' gibt das Trennzeichen für sort an, -k2 gibt an, dass nach dem zweiten Feld sortiert werden soll, n steht für numerische Sortierung und r für umgekehrte Reihenfolge.

Sie sollten sehen:

Product,Price
Laptop,1200
Monitor,200
Headphones,80
Keyboard,50
Mouse,25

Kombinieren von cut mit sed

Der sed-Befehl ist ein Stream-Editor, der grundlegende Texttransformationen durchführen kann. Hier ist ein Beispiel für die Kombination von cut mit sed:

cut -d',' -f1,2,5 data/sales.csv | sed 's/,/ - /g'

Dies extrahiert die Felder Datum, Produkt und Gesamtbetrag und ersetzt dann alle Kommas durch " - ". Sie sollten sehen:

Date - Product - Total
2023-01-15 - Laptop - 6000
2023-01-16 - Mouse - 500
2023-01-17 - Keyboard - 750
2023-01-18 - Monitor - 1600
2023-01-19 - Headphones - 960

Kombinieren von cut mit awk

Der awk-Befehl ist ein leistungsstarkes Textverarbeitungstool. So können Sie es mit cut kombinieren:

cut -d',' -f2-4 data/sales.csv | awk -F',' 'NR > 1 {print $1 " costs $" $3 " per unit"}'

Dies extrahiert die Felder 2 - 4 (Produkt, Menge und Preis) und verwendet dann awk, um eine Nachricht zu formatieren. Die Bedingung NR > 1 überspringt die Kopfzeile, und die Print-Anweisung formatiert die Ausgabe.

Sie sollten sehen:

Laptop costs $1200 per unit
Mouse costs $25 per unit
Keyboard costs $50 per unit
Monitor costs $200 per unit
Headphones costs $80 per unit

Verarbeiten mehrerer Dateien

Sie können cut auch mit mehreren Dateien verwenden. Erstellen wir eine weitere Datei:

echo "Category,Product,Stock" > data/inventory.csv
echo "Electronics,Laptop,15" >> data/inventory.csv
echo "Accessories,Mouse,50" >> data/inventory.csv
echo "Accessories,Keyboard,30" >> data/inventory.csv
echo "Electronics,Monitor,20" >> data/inventory.csv
echo "Accessories,Headphones,25" >> data/inventory.csv

Jetzt extrahieren wir das Produktfeld aus beiden Dateien:

cut -d',' -f2 data/sales.csv data/inventory.csv

Sie sollten sehen:

Product
Laptop
Mouse
Keyboard
Monitor
Headphones
Product
Laptop
Mouse
Keyboard
Monitor
Headphones

Der cut-Befehl verarbeitet alle Dateien und gibt alle Ergebnisse nacheinander aus. Beachten Sie, dass beide Kopfzeilen enthalten sind.

Durch die Kombination von cut mit anderen Textverarbeitungstools können Sie auf effiziente Weise komplexe Datenmanipulationstasks in Linux durchführen.

Praktische Anwendungen des cut-Befehls

In diesem Schritt werden Sie einige praktische Anwendungen des cut-Befehls erkunden, die Sie in realen Szenarien antreffen könnten.

Analysieren von Protokolldateien

Protokolldateien sind ein häufiger Anwendungsfall für Textverarbeitungstools. Erstellen wir eine einfache Apache-ähnliche Zugriffsprotokoll-Datei:

cd ~/project
cat > data/access.log << EOF
192.168.1.100 - - [15/Feb/2023:10:12:01 -0500] "GET /index.html HTTP/1.1" 200 2048
192.168.1.102 - - [15/Feb/2023:10:13:25 -0500] "GET /images/logo.png HTTP/1.1" 200 4096
192.168.1.103 - - [15/Feb/2023:10:14:10 -0500] "POST /login.php HTTP/1.1" 302 1024
192.168.1.100 - - [15/Feb/2023:10:15:30 -0500] "GET /dashboard.html HTTP/1.1" 200 3072
192.168.1.104 - - [15/Feb/2023:10:16:22 -0500] "GET /css/style.css HTTP/1.1" 404 512
192.168.1.105 - - [15/Feb/2023:10:17:40 -0500] "GET /index.html HTTP/1.1" 200 2048
EOF

Lassen Sie uns die IP-Adressen (erstes Feld) aus der Protokolldatei extrahieren:

cut -d' ' -f1 data/access.log

Sie sollten sehen:

192.168.1.100
192.168.1.102
192.168.1.103
192.168.1.100
192.168.1.104
192.168.1.105

Jetzt extrahieren wir die HTTP-Statuscodes (9. Feld):

cut -d' ' -f9 data/access.log

Sie sollten sehen:

200
200
302
200
404
200

Verarbeiten von Konfigurationsdateien

Ein weiterer häufiger Anwendungsfall ist die Verarbeitung von Konfigurationsdateien. Erstellen wir eine einfache Konfigurationsdatei:

cat > data/config.ini << EOF
[Database]
host=localhost
port=3306
user=dbuser
password=dbpass

[Server]
host=192.168.1.10
port=8080
maxConnections=100

[Logging]
level=INFO
file=/var/log/app.log
EOF

Um alle Parameternamen (der Teil vor dem Gleichheitszeichen) zu extrahieren:

grep -v "^\[" data/config.ini | cut -d'=' -f1

Dieser Befehl verwendet grep -v "^\[", um Abschnittsüberschriften (Zeilen, die mit [ beginnen) auszuschließen, und dann cut, um den Teil vor = zu extrahieren. Sie sollten sehen:

host
port
user
password
host
port
maxConnections
level
file

Extrahieren von Daten aus CSV-Dateien für Berichte

Erstellen wir eine komplexere CSV-Datei, die Schülerleistungen darstellt:

cat > data/grades.csv << EOF
StudentID,Name,Math,Science,English,History,Average
S001,John Smith,85,92,78,88,85.75
S002,Mary Johnson,90,88,92,85,88.75
S003,Robert Davis,78,80,85,92,83.75
S004,Jennifer Lee,95,93,90,87,91.25
S005,Michael Brown,82,85,88,90,86.25
EOF

Um einen einfachen Bericht zu generieren, der die Namen der Schüler und ihre Durchschnittsleistungen zeigt:

tail -n +2 data/grades.csv | cut -d',' -f2,6

Der tail -n +2-Befehl überspringt die Kopfzeile, und cut extrahiert die Felder Name und Durchschnitt. Sie sollten sehen:

John Smith,85.75
Mary Johnson,88.75
Robert Davis,83.75
Jennifer Lee,91.25
Michael Brown,86.25

Um Schüler mit einer Durchschnittsnote über 85 zu finden:

tail -n +2 data/grades.csv | cut -d',' -f2,6 | awk -F',' '$2 > 85 {print $1 " has an average of " $2}'

Sie sollten sehen:

John Smith has an average of 85.75
Mary Johnson has an average of 88.75
Jennifer Lee has an average of 91.25
Michael Brown has an average of 86.25

Extrahieren bestimmter Spalten aus Befehlsausgaben

Sie können cut verwenden, um bestimmte Spalten aus Befehlsausgaben zu extrahieren. Beispielsweise, um nur die Dateinamen und -größen im aktuellen Verzeichnis aufzulisten:

ls -l ~/project/data | tail -n +2 | cut -d' ' -f5,9

Dieser Befehl listet die Dateien im ausführlichen Format auf, überspringt die Kopfzeile und extrahiert die Größe (Feld 5) und den Namen (Feld 9). Die genaue Ausgabe hängt von Ihren Dateien ab, aber sie wird in etwa so aussehen:

237 access.log
99 config.ini
203 employees.txt
179 grades.csv
110 inventory.csv
150 sales.csv
264 users.txt

Diese Beispiele zeigen, wie der cut-Befehl in verschiedenen praktischen Szenarien verwendet werden kann, um bestimmte Teile von Textdaten zu extrahieren und zu verarbeiten.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie den Linux-cut-Befehl verwenden können, um bestimmte Textabschnitte aus Dateien zu extrahieren. Sie haben Folgendes behandelt:

  • Die grundlegende Verwendung von cut mit Trennzeichen, um Felder aus strukturierten Textdateien zu extrahieren
  • Wie man Text basierend auf Zeichenpositionen für Datenformate mit fester Breite extrahiert
  • Das Kombinieren von cut mit anderen Textverarbeitungstools wie grep, sort, sed und awk für komplexere Datenmanipulation
  • Praktische Anwendungen des cut-Befehls für häufige Szenarien wie Protokollanalyse, Verarbeitung von Konfigurationsdateien und Datenberichterstattung

Der cut-Befehl ist ein leistungsstarkes Werkzeug im Linux-Textverarbeitungswerkzeugkasten. Obwohl er zunächst einfach erscheinen mag, macht seine Fähigkeit, bestimmte Textabschnitte zu extrahieren, ihn für viele Datenverarbeitungstasks unschätzbar. Wenn er über Pipes mit anderen Linux-Befehlen kombiniert wird, wird er Teil eines flexiblen und leistungsstarken Textverarbeitungssystems.

Einige wichtige Erkenntnisse:

  • Verwenden Sie -d, um ein Trennzeichen anzugeben, und -f, um Felder auszuwählen, wenn Sie mit strukturiertem Text arbeiten
  • Verwenden Sie -c, um bestimmte Zeichen auszuwählen, wenn Sie mit Daten mit fester Breite arbeiten
  • Kombinieren Sie cut mit anderen Befehlen über Pipes für anspruchsvollere Verarbeitung
  • Der cut-Befehl ist am effektivsten, wenn die Daten einem konsistenten Format folgen

Mit diesen Fähigkeiten können Sie jetzt Textdaten in Linux-Umgebungen effizient extrahieren und verarbeiten, was für verschiedene administrative und Datenverarbeitungstasks unerlässlich ist.