I would like to change:
inlet
{
type patch;
...
}
outlet
{
type patch;
}
to
inlet
{
type wall;
...
}
outlet
{
type patch;
}
As a first attempt to achieve this, I tried to limit the range between inlet and outlet and replace "patch" with wall.
echo "inlet { patch } outlet" | sed "/^\(inlet [^ ]*\) .* \([^ ]*\)$/s//\1 wall \2/"
which gave output :
inlet { wall outlet
The last curly bracket is missing.
echo "inlet {patch} outlet {patch}"| sed "/inlet/,/outlet/{s/patch/wall/}"
gave output :
inlet {wall} outlet {patch}
However, I need to make sure that the "patch" that is replaced by wall shall have a "type" in the same line. It is this part I need to resolve now.
This might work for you (GNU sed):
Search for line containing
inletonly.Print it and fetch the next line.
If that line contains only
{, fetch subsequent lines until one containing only}.Now substitute a line beginning and separated by white space, two words: the first being
typeand then replace the second word bywall;.N.B. The use of the
Mflag in both regexp and the substitution commands, that bound the regexp by line i.e. the anchors respect the^and$anchors, in a multiline string.