Короткийsedподход:
sed -E 's/^(ENR1;([^;]+;){5})00;/\101;/' file
Выход:
ENR1;203023;0000;H606626;001505;EL;01;1234;0000100;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201443;000000000;000000000;000000000;000000000;
ENR1;203357;0000;H606626;001653;EL;01;2546;0000800;00;00;201346100;H6022418;
ENR6;000218;130155;000;00;201503;000000000;000000000;000000000;000000000;
ENR6;001811;150316;000;00;201624;000000000;000000000;000000000;000000000;
ENR1;203385;0000;H606625;000615;EL;01;5861;0000100;00;00;201346100;H6022418;
^(ENR1;([^;]+;){5})00;
-захватывает строки, начинающиеся с ENR1
, за которыми следуют 5 полей ([^;]+;){5}
и 7-е поле00;
vi-append-eol
(по умолчанию )привязан только в командном режиме -. Поэтому, запрашивая, привязан ли он в данный момент, текущий режим можно выяснить.
if LC_ALL=C bind -q vi-append-eol | grep -q 'not bound'; then
echo 'insert mode'
else
echo 'normal mode'
fi
LC_ALL=C
используется потому, что в других локалях «не связанный» будет написан на другом языке.
Конечно, в vi-append-eol
нет ничего особенного, есть куча других действий, которые связаны только в одном из режимов, так что любые из них можно использовать.