Como você não está realmente alterando a linha "cast":
sed '/cast \$recv \$UE_CAPABILITY_ENQUIRY/{a\
set trans_id 1
n;d}' file
Como Kusalananda comenta, este comando:
- quando uma das linhas "cast" desejadas for encontrada:
-
a
ppend a nova linha - pegue a linha
n
ext do arquivo (a linha indesejada "set") - e
d
elete
-
Em retrospectiva, isso não confirma que a linha de exclusão é aquela que você deseja excluir. Eu mudaria isso para:
sed '
/cast \$recv \$UE_CAPABILITY_ENQUIRY/ {
n
/set trans_id \[ string range \$recv 42 43 \]/ {
i\
set trans_id 1
d
}
}
' file
Para arquivos recursivamente:
find . type f | xargs sed -i '' -e '...'
Com ferramentas GNU, com mais segurança
find . type f -print0 | xargs -0 sed -i '' -e '...'