С опцией -E
, вам не нужны перед обратными косыми чертами сохраняющих круглых скобок:
sed -i -E 's/s([0-9]*)_coded_block\[([0-9]*)\]/s\1_coded_block_\2/g' myfile
Вы можете один или-больше цифр, в этом случае вы используете +
вместо *
. Если вы решили отказаться от -E
, ваш исходный код должен работать, хотя, если вы хотите, по крайней мере, одну цифру, вам нужно написать \{1,\}
:
sed -i 's/s\([0-9]\{1,\}\)_coded_block\[\([0-9]\{1,\}\)\]/s\1_coded_block_\2/g' myfile
-i
обозначения показаны только надежно работает с GNU sed
. BSD (macOS или Mac OS X) sed
будет обрабатывать -E
в первой командной строке в качестве суффикса (во втором случае вы получите жалобу о m
, не являющуюся действительной командой sed
, потому что сценарий будет рассматриваться как суффикс и m
из myfile
будет ошибочной командой sed
. Вы должны использовать -i ''
для резервного копирования (перезаписи) файла без суффикса. Если вы хотите переносить код, используйте -i.bak
, который создает файл резервной копии с обоими вариантами - необходимо добавить .bak
до -i
для GNU sed
.
Вы можете предоставить образцы данных, по которым требуется замена, необходимо сделать? –
Удалить -E и попробовать –