Удаление six.b из нескольких файлов

У меня есть десятки файлов в проекте, и я хочу изменить все вхождения six.b("...") на b"..." . Могу ли я сделать это с помощью какого-либо скрипта bash regex?

2 Solutions collect form web for “Удаление six.b из нескольких файлов”

Это возможно полностью на Python, но сначала я сделаю резервную копию моего дерева проектов, а затем:

 import re import os indir = 'files' for root, dirs, files in os.walk(indir): for f in files: fname = os.path.join(root, f) with open(fname) as f: txt = f.read() txt = re.sub(r'six\.(b\("[^"]*"\))', r'\1', txt) with open(fname, 'w') as f: f.write(txt) print(fname) 

Относительно простое решение bash (изменение * .foo на * .py или любой другой шаблон файла соответствует вашей ситуации):

 #!/bin/bash export FILES=`find . -type f -name '*.foo' -exec egrep -l 'six\.b\("[^\"]*"\)' {} \; 2>/dev/null` for file in $FILES do cp $file $file.bak sed 's/six\.b(\(\"[^\"]*[^\\]\"\))/b\1/' $file.bak > $file echo $file done 

Заметки:

  1. Он будет рассматривать или изменять файлы, соответствующие шаблону

  2. Он сделает копию «.bak» каждого файла, который он изменяет

  3. Он не будет обрабатывать встроенные \") , например six.b("asdf\")") , но я не знаю, что есть тривиальное решение этой проблемы, не зная больше о файлах, которыми вы манипулируете. Является ли конец six.b("") гарантированным последним ") на линии?

  • Убить процесс python с pkill python
  • Прочитать переменную python в сценарии оболочки?
  • Как добавить каталог с двоеточием в PYTHONPATH?
  • Python - время.time () против времени bash
  • Получение командной строки Python при вызове из сценария bash
  • Самый простой способ создания гитарных аккордов в Linux и / или python
  • Функция bash, которая запускает скрипт
  • Как вернуть значение скрипта python в переменную bash
  • Python - лучший язык программирования в мире.