How to use 'sed' with piping

I want to replace a string outputted from grep, I have:

$ npm info webpack | grep version 

it outputs me

$ version: '2.1.0-beta.12', 

but I want to have:

$ 2.1.0-beta.12 

So I think I might achieve that using sed and replace unnecessary substrings. But here goes the hard part for me:

$ npm info webpack | grep version: | sed s/version: / sed: -e expression #1, char 10: unterminated `s' command 

How can achieve my goal?

0

3 Answers

If you are going to use sed, there is no need to also use grep. Try:

npm info webpack | sed -En "s/version: '(.*)',/\1/p" 

Example:

$ echo "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p" 2.1.0-beta.12 

Alternative: using awk

Similarly, if we use awk, there is no need to also grep:

npm info webpack | awk -F"[ ',]+" '/version:/{print $2}' 

Example:

$ echo "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}' 2.1.0-beta.12 

How it works:

  • -F"[ ',]+"

    This tells awk to use spaces, single quotes, or commas or any combination thereof as field separators.

  • /version:/{print $2}

    If a line contains version:, then print the second field.

2

The sed substitute command (s) expects a search pattern and a replacement string. You only supplied it with a search pattern. You also should quote strings properly in the shell:

$ npm info webpack | grep 'version:' | sed 's/version: //' 

This will give you the result '2.1.0-beta.12',, which is not quite what you want.

Since the output from grep is so simple, you may use cut with the delimiter ' to get the second field of the line (without the need for complicated regular expressions):

$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2 

This will give you 2.1.0-beta.12.

I also added -F to grep since the string you search for is a fixed string, not a regular expression.

First, you may try using sed:

npm info webpack | grep version: | sed 's/version: //' 

or you may use awk:

npm info webpack | grep version: | awk '{print $2}' 

which is probably easier.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like