Удаление 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 в Консоль внутри подпроцесса из дочернего скребка
  • Подпроцесс Python не выполняется должным образом
  • Кодировка по умолчанию для python для stderr?
  • Python vs Bash - В каких задачах каждый из них превосходит другие по производительности?
  • Вызов функции Python из сценария оболочки
  • Как вызвать функцию / переменную скрипта оболочки из python?
  • Группировка данных по значению столбца
  • Эмуляция источника Bash в Python
  • Python - лучший язык программирования в мире.