Ich muss Text aus einer Zeile vor dem Trennzeichen löschen.
Beispielsweise:
(123434): hello::{apple,orange,mango}.
Ich muss zuerst den Text löschen :
. dh (123434)
.
Gibt es unter Linux einen Befehl, um diese Aufgabe auszuführen?
Ich muss Text aus einer Zeile vor dem Trennzeichen löschen.
Beispielsweise:
(123434): hello::{apple,orange,mango}.
Ich muss zuerst den Text löschen :
. dh (123434)
.
Gibt es unter Linux einen Befehl, um diese Aufgabe auszuführen?
Antworten:
Dieser sed
Befehl sollte den Trick machen. Der folgende Befehl überschreibt die Datei:
sed -i 's/^[^:]*:/:/' file
Entfernen Sie die Markierung, um nur die Ausgabe zu drucken -i
. Entfernen Sie das -i
Flag, und leiten Sie die Ausgabe um, um die Ausgabe in einer neuen Datei abzulegen:
sed 's/^[^:]*:/:/' file > new_file
Sie können dies mit einer recht einfachen Bash- Anweisung tun :
mytext="(123434): hello::{apple,orange,mango}."
echo ${mytext#*)}
Dies wird gedruckt : hello::{apple,orange,mango}.
. Sie können Präfixe und Suffixe auf ähnliche Weise schneiden. Außerdem können Präfix- und Suffixdefinitionen Platzhalter enthalten.
Präfix ausschneiden - bis zum ersten übereinstimmenden Präfix-Platzhalter: ${variable#prefix}
Präfix ausschneiden - bis zum letzten übereinstimmenden Präfix-Platzhalter: ${variable##prefix}
Suffix ausschneiden - bis zur ersten Übereinstimmung mit Suffix-Platzhaltern: ${variable%suffix}
Suffix ausschneiden - bis zur letzten Übereinstimmung mit Suffix-Platzhaltern: ${variable%%suffix}
Es mag auf den ersten Blick unklar aussehen, siehe folgendes Beispiel:
mytext="xAxBxAxBx"
echo ${mytext#*A} # will print: xBxAxBx
echo ${mytext##*A} # will print: xBx
echo ${mytext%B*} # will print: xAxBxAx
echo ${mytext%%B*} # will print: xAx
echo ${mytext%%C*} # will print: xAxBxAxBx
Im letzten Beispiel stimmt das Muster nicht überein, daher wird nichts abgeschnitten.
echo ${mytext#*:}:
. Damit werden Zeilen wie (123)(434): hello::{apple,orange,mango}.
und richtig behandelt 123434: hello::{apple,orange,mango}
.
sed
oderawk