Schneiden Sie ein Wort, bevor Trennzeichen - Bash
Wie verwende ich cut
um ein Wort vor dem Trennzeichen? Zum Beispiel, ich habe die Zeile unten in file.txt
:
eins zwei drei vier fünf sechs sieben
wenn ich den cut
Sie folgenden Befehl ein:
cat file.txt | cut -d ':' -f1
...dann bekomme ich alles vor dem Trennzeichen; d.h.:
eins zwei drei vier fünf
...aber ich will nur, um "fünf"
Möchte ich nicht verwenden awk
oder die position, da die Datei immer ändert und die position der "fünf" kann überall sein. Die einzige Sache fixiert ist, dass fünf ":" Trennzeichen.
Dank!
Ihr Grund für die nicht wollen, verwenden Sie awk nicht sinnvoll.
meine Datei ändern kann, wie ich bereits erwähnt habe, zum Beispiel s='fünf: zwei drei vier sieben sechs' , so will ich nicht verwenden print $5 fester.
Amandan, das funktioniert! und ich lernte einen neuen Befehl "rev" 🙂
War mir nicht. Ich sagte nur, dass awk ist viel mehr als
cut -d ':' -f1 file.txt | rev | cut -d' ' -f 1 | rev
funktionieren würde, wenn Sie wirklich wollen, zu verwenden, schneiden, obwohl es wäre viel einfacher mit awk oder sedmeine Datei ändern kann, wie ich bereits erwähnt habe, zum Beispiel s='fünf: zwei drei vier sieben sechs' , so will ich nicht verwenden print $5 fester.
Amandan, das funktioniert! und ich lernte einen neuen Befehl "rev" 🙂
War mir nicht. Ich sagte nur, dass awk ist viel mehr als
print $5
.InformationsquelleAutor sidman | 2015-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Reinen bash:
(Wenn Sie einen Doppelpunkt in Ihrer Datei
s=$(grep : file)
sollte Ihre erste variable)Warum haben Sie alle diese große Neunen? 😛 (Für eine ernsthafte Antwort - Klarheit, nehme ich an. Aber wenn ich tatsächlich darüber nachzudenken, was ich Tat, hätte ich Sie genannt
string
,words
,lastword
oder etwas ähnliches.)InformationsquelleAutor Amadan
Da müssen Sie mehr als ein Feld-Trennzeichen hier
awk
kommt zur Rettung:EDIT: Wenn das Feld Positionen ändern können, dann versuchen Sie, diese
awk
:Hier ist ein BASH-one-liner zu bekommen, dies in einem einzigen Befehl:
Wenn das Feld Positionen ändern können, versuchen Sie dann meine bearbeitete awk-Befehl.
Dank Anubhava! das funktioniert auch gut
Sie sind willkommen, überprüfen Sie auch meine BASH one-liner, die ich denke, passen Ihre Aufgabe.
InformationsquelleAutor anubhava
möchten Sie vielleicht etwas wie das hier tun:
cat file.txt | while read line
do
for word in $line
do
if [
echo $word | grep ':$'
];echo $Wort
fi
getan
getan
wenn es eine einheitliche Struktur (mit unterschiedlicher Anzahl von Worten in der Zeile), können Sie ändern Sie die erste Zeile an:
cat file.txt | cut -d':' -f1 | while read line
do ...
und so zu vermeiden, Verarbeitung ':' an der rechten Seite der delimeter
InformationsquelleAutor Adi
Versuchen
echo "one two three four five: six seven" | awk -F ':' '{print $1}' | awk '{print $NF}'
Diese wird immer drucken das Letzte Wort vor dem ersten
:
egal was passiertInformationsquelleAutor Zloj