Я хочу заменить строку, выведенную из grep
, у меня есть:
$ npm info webpack | grep version
это выводит меня
$ version: '2.1.0-beta.12',
но я хочу иметь:
$ 2.1.0-beta.12
Так что я думаю, что могу добиться этого, используя sed
и заменяя ненужные подстроки. Но здесь идет самая сложная часть для меня:
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
Как можно достичь моей цели?
-E
опция, очевидно, означает использование синтаксиса ERE, но в моем руководстве по GNU sed 4.2.2 только упоминается-r
.-E
работает, хотя!-E
это недокументированный синоним-r
. Ходят слухи, что POSIX установил-E
, что BSD / OSX уже использует, и, если это будет добавлено к окончательному стандарту, мы все перейдем к-E
.Команда
sed
замены (s
) ожидает шаблон поиска и строку замены. Вы предоставили только шаблон поиска. Вы также должны правильно заключать строки в кавычки:Это даст вам результат
'2.1.0-beta.12',
, который не совсем то, что вы хотите.Поскольку вывод из
grep
настолько прост, вы можете использоватьcut
с разделителем,'
чтобы получить второе поле строки (без необходимости сложных регулярных выражений):Это даст вам
2.1.0-beta.12
.Я также добавил
-F
кgrep
так струна поиска является фиксированной строкой , а не регулярное выражения.источник
Во-первых, вы можете попробовать использовать
sed
:или вы можете использовать
awk
:что, вероятно, проще.
источник