user1238097
user1238097

Reputation: 87

Regex grab a substring from a string

Anyone familiar with how to use regex grab the following expression:

Random1 `json:"random1"`
Random2 `json:"random2"`
Random3 `json:"random3"`

desired output:

random1
random2
random3

What I have tried so far:

Try one:

grep -o '(\".*?\")' example1.file 

Try two:

grep -o '\"*\"' example1.file

returned nothing

This returns everything but just want the substring:

Attempt 3

grep -E "\"(.*)\"" example1.file 

Expected output:

random1
random2
random3

Upvotes: 1

Views: 67

Answers (3)

Piotr Henryk Dabrowski
Piotr Henryk Dabrowski

Reputation: 911

Using sed:

sed -E 's/^.*"(.*)"`$|.*/\1/g' example1.file

This (the |.* part) also clears lines without a match. Which then can be easily filtered out with ... | grep .

Upvotes: 1

Cyrus
Cyrus

Reputation: 88999

With GNU grep and a Perl-compatible regular expression:

grep -Po '(?<=").*(?=")' file

Output:

random1
random2
random3

Upvotes: 1

Barmar
Barmar

Reputation: 782693

You need to use -P with lookarounds, so that the quotes won't be included in the match.

grep -o -P '(?<").*(?=")' example1.file

This requires GNU grep to get the -P option for PCRE.

Upvotes: 1

Related Questions