Изменение вхождения строки в файл при соблюдении новых строк строки DOS

Я использую Visual Studio для разработки C #, используя Cygwin для некоторых задач, требующих создания сценариев. Недавно я хотел изменить все вхождения строки AAA в BBB в файлы моего проекта. Я начал со старого надежного sed но, к моему ужасу, он изменил новые линейные последовательности DOS на Unix.

Вот что я использовал:

 sed -i 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path) 

Кажется, нет переключателя sed который бы сделал то, что я хочу. Есть ли еще какой-нибудь инструмент Unix, который мог бы мне помочь?

EDIT: между C # файлами есть и другие скрипты с новыми символами линии Unix. Было бы лучше, если бы этот инструмент не изменил их на DOS. 🙂

2 Solutions collect form web for “Изменение вхождения строки в файл при соблюдении новых строк строки DOS”

Там должна быть встроенная функция для этого в VS.

Если нет, вы можете использовать добрые старые vi :

 vi +'bufdo %s/AAA/BBB/g | update' +q $(grep -rl AAA /cygdrive/c/project_path) 

Вместо этого вы можете использовать Perl Cygwin. Типичные команды sed легко переносятся на Perl. Обратите внимание, что синтаксис регулярных выражений отличается (расширенные регулярные выражения в Perl, основные регулярные выражения в sed).

 perl -i -pe 's/AAA/BBB/g' $(grep -rl AAA /cygdrive/c/project_path) 

Обратите внимание, что синтаксический анализ результата подстановки команды в виде списка файлов является хрупким. Он будет разбит, если в именах файлов есть пробелы или обратные косые черты; оба они довольно распространены в Windows (вы получаете обратную косую черту, когда путь не был переведен с родного на cygwin, например, когда он исходит из переменной среды). xargs -d '\n' используйте xargs -d '\n' (в именах файлов Windows нет новых строк).

 grep -rl AAA /cygdrive/c/project_path | xargs -d '\n' perl -i -pe 's/AAA/BBB/g' 
  • Как получить все номера из строки и добавить их?
  • Выполнение нескольких команд sed в одних и тех же файлах одновременно
  • Назначение по умолчанию для нулевой переменной с заменой команды
  • Как использовать sed для печати части строки, содержащей хеши (или любое альтернативное решение)?
  • Невозможно сравнить результат lsb_release с строкой в ​​Bash
  • Как я могу использовать sed, чтобы отрезать строку от строки?
  • Подстрока grep между кавычками
  • Заменить сложную строку в нескольких файлах
  • Grep все строки из нескольких двоичных файлов в один файл txt
  • Заменить всю строку в файле из командной строки
  • Sed - замена строк с помощью группировок
  • Interesting Posts

    Не удалось запустить графический интерфейс

    Запуск MPlayer через скрипт PHP

    Где я могу найти список кодов ошибок USB?

    RuntimeError: вам нужно установить gevent для использования этого рабочего

    Каковы накладные расходы на использование нескольких более мелких устройств рейдов в сравнении с секционированными устройствами рейдов в виде физических томов?

    Как удалить модуль ядра, если он все еще используется?

    Фиксация GRUB после клонирования диска с RSYNC

    Есть ли инструмент командной строки для преобразования видео в формат WebM в Debian Squeeze?

    Как установить общий сетевой предел для каждого клиента + приоритет для подтверждений TCP

    Каков наиболее эффективный способ grep для двух совершенно разных вещей и присвоения значений отдельным переменным?

    Удалите файлы, которые не включены в `rsync -files-from`

    Mutt: горячая клавиша для возврата в INBOX?

    CentOS 6 iptables nat router

    Создайте RPM для распространения пользовательской политики SELinux

    Единая скобка в присвоении переменной bash

    Linux и Unix - лучшая ОС в мире.