С любым awk в любой оболочке на любой коробке UNIX:
$ awk '
{ gsub(/\\[(]/,"\n1"); gsub(/\\)/,"\n2") }
match($0,/[/]key4[(][^)]+/) {
$0 = substr($0,RSTART+6,RLENGTH-6)
gsub(/\n1/,"\\("); gsub(/\n2/,"\\)")
print
}
' file
outside \(inside\) outside
С GNU awk для сопоставления 3-го аргумента ():
$ awk '
{ gsub(/\\[(]/,"\n1"); gsub(/\\)/,"\n2") }
match($0,/[/]key4[(]([^)]+)/,a) {
$0 = a[1]
gsub(/\n1/,"\\("); gsub(/\n2/,"\\)")
print
}
' file
outside \(inside\) outside
Выше просто замените \(
и \)
строками, которые содержат символы новой строки (которые не могут существовать с записями, разделенными символами новой строки) \n1
и \n2
, затем найдет совпадение для key4, затем вернет замещающие строки в их исходные значения перед печатью.