Chcę zastąpić ciąg wyjściowy grep
, mam:
$ npm info webpack | grep version
wyprowadza mnie
$ version: '2.1.0-beta.12',
ale chcę mieć:
$ 2.1.0-beta.12
Myślę więc, że mógłbym to osiągnąć, używając sed
i zastępując niepotrzebne podciągi. Ale tutaj jest dla mnie trudna część:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Jak mogę osiągnąć mój cel?
-E
opcja oczywiście oznacza użycie składni ERE, ale moja instrukcja GNU sed 4.2.2 tylko wspomina-r
.-E
działa jednak!-E
jest nieudokumentowanym synonimem-r
. Plotka głosi, że POSIX już się zdecydował-E
, z którego już korzysta BSD / OSX, a jeśli zostanie to dodane do ostatecznego standardu, wszyscy przejdziemy na-E
.Polecenie
sed
substitute (s
) oczekuje wzorca wyszukiwania i ciągu zastępującego. Dostarczyłeś tylko wzór wyszukiwania. Powinieneś również poprawnie cytować ciągi w powłoce:To da ci wynik
'2.1.0-beta.12',
, który nie jest dokładnie tym, czego chcesz.Ponieważ dane wyjściowe z
grep
są tak proste, możesz użyćcut
z separatorem,'
aby uzyskać drugie pole wiersza (bez potrzeby skomplikowanych wyrażeń regularnych):To ci da
2.1.0-beta.12
.Dodałem też
-F
dogrep
ponieważ ciąg szukasz jest ustalony ciąg , a nie wyrażenie regularne.źródło
Najpierw możesz spróbować użyć
sed
:lub możesz użyć
awk
:co jest prawdopodobnie łatwiejsze.
źródło