2016-09-22 4 views
0

Я пытаюсь заменить все шаблоны s#_coded_block[#] с s#_coded_block_# в myfile. Я посмотрел в Интернете о том, как заменить шаблоны с группами и моя команда:Замена шаблона с помощью sed

sed -i -E 's/s\([0-9]*\)_coded_block\[\([0-9]*\)\]/s\1_coded_block_\2/g' myfile 

Однако я получаю

недопустимую ссылку \ 2 на `S'РИТ

командования при Я выполняю эту команду.

+0

Вы можете предоставить образцы данных, по которым требуется замена, необходимо сделать? –

+2

Удалить -E и попробовать –

ответ

1

С опцией -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.

+0

Большое спасибо, это работает! – slin6174

Смежные вопросы