Поскольку вы даете пример sed
в одном из комментариев, я предполагаю, что вы хотите получить чистое решение bash?
while read input; do
for field in tag tag1; do
case $input in
*"<$field>"*"</$field>"* )
pre=${input#*"<$field>"}
suf=${input%"</$field>"*}
# Where are we supposed to be getting the replacement text from?
input="${input%$pre}SOMETHING${input#$suf}"
;;
esac
done
echo "$input"
done
Это совершенно неинтеллектуально и, очевидно, работает только на хорошо сформированном входе с начальным тегом и конечным тегом в одной строке, вы не можете иметь несколько экземпляров одного и того же тега в одной строке, список тэгов для замещения жестко закодирован и т. д.
I не может представить ситуацию, когда это было бы действительно полезно, и предпочтительнее либо сценария, либо надлежащего XML-подхода.
Это решение на C/C++, которое не использует никаких побитовых операторов и не требует никаких математических библиотек, хотя это своего рода обман...
double f(double n)
{
if (n == (double)(int)n)
return n + 0.5;
else
return -(n - 0.5);
}
Это работает для всех 32-битных целых чисел за единственным исключением 0x80000000
(поскольку его противоположность не может храниться в 32-битной целочисленной системе). f(f(n)) == -n
всегда будет true
, за исключением одного случая.
Я уверен, что есть более простой и быстрый способ реализовать это. Это просто первое, что пришло в голову.