Замена от 2-го до 4-го вхождения с помощью команды sed - PullRequest
0 голосов
/ 31 января 2020

enter image description here

Я хочу заменить букву «@» от 2-го вхождения до 4-го.

sed 's/p/@/2g' file.txt

Эта команда заменяет 2-е вхождение вхождение до последнего вхождения «р». Но я хочу заменить от 2-го до 4-го. Так как это сделать?

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Предполагая, что это bash или zsh, вы можете использовать расширение скобок.

sed -e's/p/@/2'{,,} file

{,,} будет повторять -e's/p/@/2' трижды, поэтому он заменит 2-й, 3-й и 3-й 4-й p с.

1 голос
/ 31 января 2020

Это может работать для вас (GNU sed):

sed 's/p/\n/5g;s/p/@/2g;y/\n/p/' file

Заменить 5-е и последующие p на строку с новой строкой, заменить 2-е и последующие p на @ и, наконец, восстановить символы новой строки в p.

Или с почтением к oguz ismail:

sed -e's/p/@/'{4..2} file

Это использует расширение bash для генерации строк подстановки для случаев появления p с 2 по 4, но в обратном порядке (прямая замена не будет учитывать предыдущие замены).

...