Ich versuche nicht, irgendetwas gleich danach zu erfassen name=
, sondern nur Leerzeichen und alphanumerische Zeichen.
z.B:
name=some value here
Ich bekomme
some value here
Ich bin total neu in diesem Bereich, der folgende Grep passt zu allem, einschließlich dem name=
.
grep 'name=.*' filename
Jede Hilfe wird sehr geschätzt.
echo 'name=some value here' | grep -Po 'name=\K[ A-Za-z0-9]*'
Antworten:
Wie hier beschrieben , möchten Sie eine positive Lookbehind-Klausel, wie z.
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
Das -P lässt grep den Perl-Dialekt verwenden, andernfalls müssten Sie wahrscheinlich die Klammern verlassen. Sie können den
-o
Parameter auch an anderer Stelle anhängen , um nur das auszudrucken, was übereinstimmt. Der Teil in Klammern gibt an, dass Sie alphanumerische Zeichen und Leerzeichen möchten.Der Vorteil der Verwendung einer positiven Lookbehind-Klausel besteht darin, dass der Text "name =" nicht Teil der Übereinstimmung ist. Wenn grep übereinstimmenden Text hervorhebt, wird nur der alphanumerische Teil (und Leerzeichen) hervorgehoben. Der Parameter -o zeigt auch nicht den Teil "name =" an. Und wenn Sie dies auf ein anderes Programm wie sed umstellen, das möglicherweise den Text erfasst und etwas damit macht, wird der Teil "name =" nicht erfasst, obwohl Sie dies auch mithilfe der Erfassung von parenthess tun können.
quelle
\K
Muster, da es für mich leichter zu lesen ist, zgrep -oP 'name=\K[ A-Za-z0-9]*' filename
. Außerdem beanspruchen die Perl-Dokumente einen Leistungsvorteil mit\K
.Versuche dies:
sed -n 's/^name=//p' filename
Es weist sed an, standardmäßig nichts (-n) zu drucken, Ihr Präfix durch nichts zu ersetzen und zu drucken, wenn die Ersetzung erfolgt.
Bonus: Wenn Sie es wirklich brauchen, um nur Einträge mit Leerzeichen und alphanumerischen Zeichen abzugleichen, können Sie dies auch tun:
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
Hier haben wir ein Muster hinzugefügt, um Leerzeichen und alphanumerische Zeichen nur bis zum Ende der Zeile ($) abzugleichen. Wenn wir übereinstimmen, ersetzen wir die Gruppe in Klammern und drucken.
quelle
sed
jetzt auch damit beschäftige. Danke für deine Tipps!gaffen
echo "name=some value here" | awk -F"=" '/name=/ { print $2}'
oder mit bash
str="name=some value here" IFS="=" set -- $str echo $1 unset IFS
oder
str="name=some value here" str=${str/name=/}
quelle
grep extrahiert nicht wie erwartet. Was Sie brauchen ist
grep "name=" file.txt | cut -d'=' -f1-
quelle
grep druckt die gesamte Zeile dort, wo sie mit dem Muster übereinstimmt. Verwenden Sie die Option grep -o, um nur das übereinstimmende Muster zu drucken. Sie müssen wahrscheinlich auch sed verwenden, um den Namen = Teil des Musters zu entfernen.
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d
quelle