Ich möchte eine Zeichenfolge ersetzen, die von ausgegeben grep
wurde. Ich habe:
$ npm info webpack | grep version
es gibt mich aus
$ version: '2.1.0-beta.12',
aber ich möchte haben:
$ 2.1.0-beta.12
Also denke ich, ich könnte das erreichen, indem ich sed
unnötige Teilstrings benutze und ersetze. Aber hier ist der schwierige Teil für mich:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Wie kann ich mein Ziel erreichen?
-E
Option bedeutet natürlich, die ERE-Syntax zu verwenden, aber mein GNU sed 4.2.2-Handbuch erwähnt nur-r
.-E
funktioniert aber!-E
ein undokumentiertes Synonym für-r
. Es geht das Gerücht, dass sich POSIX für-E
das BSD / OSX-System entschieden hat. Wenn dies zum endgültigen Standard hinzugefügt wird, werden wir alle darauf umsteigen-E
.Der
sed
Ersatzbefehl (s
) erwartet ein Suchmuster und eine Ersatzzeichenfolge. Sie haben nur ein Suchmuster angegeben. Sie sollten auch Zeichenfolgen in der Shell richtig zitieren:Dies gibt Ihnen das Ergebnis
'2.1.0-beta.12',
, das nicht ganz das ist, was Sie wollen.Da die Ausgabe von
grep
so einfach ist, können Sie verwendencut
mit dem Begrenzer'
das zweite Feld der Zeile abrufen (ohne komplizierte reguläre Ausdrücke zu benötigen):Dies wird dir geben
2.1.0-beta.12
.Ich habe auch hinzugefügt
-F
,grep
da die Zeichenfolge, nach der Sie suchen, eine feste Zeichenfolge und kein regulärer Ausdruck ist.quelle
Zunächst können Sie versuchen, Folgendes zu verwenden
sed
:oder Sie können verwenden
awk
:das ist wohl einfacher.
quelle