Search code examples
regexlinuxgrepquotes

grep command in linux using " in regex


I have the following linux cmd:

grep -o file.txt "\"uri\":\".{1,}\""

The text i have is the following:

"some characters here","uri":"some_URI*Here.^%$#!", "again a set of irrelevant characters"

Of course the output i want to have is:

"uri":"some_URI*Here.^%$#!"

Why dont i have the correct output? Because of the " required by the grep which mix with " in my text? How to fix it?


Solution

  • You could use the following regex:

    grep -oE '"uri":".[^"]+"' inputFile
    

    Original poster provided a regex that is almost correct but have some flaws, below is his/her version and a corrected one:

    grep -o  inputFile "\"uri\":".{1,}\""   # wrong
    grep -oE '"uri":"[^"]{1,}"' inputFile   # correct
    

    The problems with the first use of grep are:

    • inputFile should come after the regex, not before
    • Needs -E flag for {1,} to work
    • Better use single quotes outside so that double quotes need no be escaped
    • Need to use [^"] character class instead of .