Использование ED для манипулирования файлами, сопоставленными на Find

StackOverflow https://stackoverflow.com/questions/2807149

  •  25-09-2019
  •  | 
  •  

Вопрос

Следующий Рекомендация Bash-хакеров Вики, Я хочу редактировать файлы, используя ed.

В частности, я хочу сделать следующее с ED вместо SED:

find . -type f -exec sed -i -e 's/a/b/g' {} \;

Я вижу, что Эд не вытеснит, как Sed's -e, так что, насколько я знаю, трубы и перенаправления IO являются единственным способом работать с ним неответно.

Таким образом, используя ED из скрипта Bash, чтобы сделать то же самое, что приведена команда выше Sed Sed:

ed file_name <<<$'g/a/s//b/g\nw'

Или

echo $'g/a/s//b/g\nw' | ed file_name

Но, насколько я знаю, невозможно привлечь трубы или перенаправления IO в -ЕКек.

Я скучаю по тебе? Или единственный способ преодолеть это - использовать петли?

for file in $(find . -type f -print); do ed $file <<<$'g/a/s//b/g\nw'; done;
Это было полезно?

Решение

find . -type f -exec bash -c 'ed -s "$2" <<< "$1"' _ $'g/a/s//b/g\nw' {} \;

И версия POSIX:

find . -type f -exec sh -c 'printf "%s\n" "g/a/s//b/g" w | ed -s "$1"' _ {} \;

Основная причина использования ED Ed Over SED -i является то, что файлы ED редактирует файлы, когда SED -i перезаписывает файлы, и это проблема, если у вас есть ссылки, которые вы не хотите ломаться.

Другие советы

Этот фрагмент Find & Ed оснащен тестовым режимом (так что вы можете убедиться, что вы получили свое регулярное выражение прямо перед Acutal Mass Shree Action):

Поиск и заменить на Find & Ed

http://codesnippets.joyent.com/posts/show/2299.

Поместите команду ED со всеми перенаправлениями и «здесь документы» в сценарии оболочки, и вызовите это из находки.

Но я должен спросить: почему Эд? Как вы думаете, что вы можете сделать с Ed, что вы не можете сделать с SED?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top