РЕДАКТИРОВАТЬ: Или с sed
следующие могут помочь вам, проверено на Input_file упомянул этот пост сам с первой попытки.
sed 's#entry[A-Z]:{.*}##g;s#\[TIME\] ##;s#\[TYPE\] ##' Input_file
Поскольку вы не упомянули ожидаемый результат в своем сообщении, поэтому на основании упомянутого вами резюме только написали код, который удалит все значения, которые имеют {c1: val1, c2: val2}
в строках, и напечатает все остальные значения.
Допустим, следующий файл является Input_file.
cat Input_file
[TIME] [TYPE] entryA:a entryB:b entryC:{c1: val1, c2: val2} entryA:a entryB:b
Тогда следующий код для этого:
awk '
{
while($0) {
match($0,/entry[a-zA-Z]+:{[^}]*\}/)
val=substr($0,1,RSTART-1)
gsub(/\[TYPE\] |\[TIME\] /,"",val)
if(RSTART>1) {
printf("%s",val)
}
if(RSTART && RLENGTH) {
$0=substr($0,RSTART+RLENGTH+1)
}
else {
printf("%s\n",substr($0,pre_start+pre_end+1))
next
}
prev_start=RSTART
prev_end=RLENGTH
}
}
' Input_file
Вывод будет следующим.
entryA:a entryB:b entryA:a entryB:b