# If you'd like to omit non-matching lines from the result; add ';d' to the end of the expression.
sed -E 's/\((?:[^()]++|(?R))*\)|,/|$0|/gm;t' <<< "SELECT Name AS [Object Name], Switch([Type]=5,'Query',[Type]=-32768,'Form',[Type]=6,'Table') AS [Object Type], Switch([Type]=5,1,[Type]=-32768,2,[Type] In (1,4,6),6) AS [Object Type ID], Left(Name,4) as Prefix, LTrim(RTrim(Mid([Name],5,30))) as Suffix
SELECT \"Amy's code is righteous.\", left(\"abc\",1), right('source code',4), \"Bill's code has been righteous too.\"
----------
End goal is to replace all commas in SQL SELECT clause with comma+linefeed but ignore commas inside parenthesis (which may be nested).
\((?:[^()]++|(?R))*\)
This expression will find all of the nested parentheis using recursion. I want to do one of these two options:
a) Replace all commas in the matched groups with the pipe \"|\" character,
then with two simple StrReplace() calls: replace all commas with comma+linefeed, then replace all | with comma.
OR
b) Select all text that is not in the matched group and replace commas with comma+linefeed.
I'm using AutoHotkey and the RegExReplace() function."
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for SED, please visit: https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html