How can I extract the content between two brackets?

regex, shell, unix

Solution

Still using grep and regex

grep -oP '\(\K[^\)]+' file

`\K` means that use look around regex advanced feature. More precisely, it's a positive look-behind assertion, you can do it like this too :

grep -oP '(?<=\()[^\)]+' file

if you lack the `-P` option, you can do this with perl :

perl -lne '/\(\K[^\)]+/ and print $&' file

Another simpler approach using awk

awk -F'[()]' '{print $2}' file

Problem

My input: ``` 1:FAILED + *1 0 (8328832,AR,UNDECLARED) ``` This is what I expect: ``` 8328832,AR,UNDECLARED ``` I am trying to find a general regular expression that allows to take any content between two brackets out. My attempt is ``` grep -o '\[(.*?)\]' test.txt > output.txt ``` but it doesn't match anything.

Original source