Изменение вхождения строки в файл при соблюдении новых строк строки 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' 
  • bash - Разделить значения «таблицы» в строки в массиве
  • Стандарты для строк с двойными кавычками
  • Назначение по умолчанию для нулевой переменной с заменой команды
  • Строки - Извлечь версию файла Рекурсивный
  • Добавить (изменить) каждый элемент массива через расширение параметра (т. Е. Без printf)?
  • Заменяйте несколько строк за один проход
  • Удалить последний символ из строки, захваченной с помощью awk
  • Как вставить содержимое файла в строку в bash
  • Bash: как получить значение из массива для создания команды из него
  • Проверьте, содержит ли переменная оболочки абсолютный путь
  • Как печатать каждую строку файла столько раз, сколько в соответствии с номером в первом столбце
  • Bash - Замена случайного числа между кавычками
  • Linux и Unix - лучшая ОС в мире.