командная строка находит/заменяет справку

У меня есть ряд 5000 + файлы, что я должен выполнить в простом поиске и замене. Я делал его в текстовом редакторе (EditPlus) путем открытия 500 файлов за один раз, выполнения глобального поиска / замена, сохранения всех, закрытия, и т.д. Но, это занимает буквально часы, чтобы сделать, и это скучно и утомительно, и я уже сделал это однажды сегодня и должен сделать это снова, потому что все файлы были обновлены. Существует ли способ сделать это через командную строку Bash? Вот детали:

Найти onchange="document.location ='/products/view.html/view/'+this.value"

Замените его onchange="alert('Not implemented')" style="display: none"

Все файлы имеют.HTM расширение, но они вкладываются в нескольких подкаталогах.

РЕДАКТИРОВАНИЕ - я нахожусь на Mac и предпочел бы *, отклоняют базирующееся решение.

1
задан 10.01.2011, 22:03

2 ответа

Основная команда для Вас случается, похож на это:

sed -i 's|oldvalue|newvalue|g' file1 file2 file3

Если весь Ваш файл находится в каталоге ~/foo/bar/, то, что Вы хотите сделать:

cd '~/foo/bar/'
find . -type f | xargs sed -i "" "s|onchange=\"document.location ='/products/view.html/view/'+this.value\"|onchange=\"alert\('Not implemented'\)\" style=\"display: none\"|g"

Править: шарик (* как имя файла), может быть проблематичным с очень очень файлами и не входят в дочерние каталоги. В этом случае измените последнюю строку.

РЕДАКТИРОВАНИЕ 2: с BSD sed (тот, используемый на MacOS X) -i нуждается в аргументе. Использование BTW xargs. Благодаря @Dennis Williamson

3
ответ дан 12.12.2019, 08:36

Так как EditPlus является редактором Windows, я предполагаю, что Вы хотите решение для оболочки Windows.

Вы можете получить sed варианты для Windows, но здесь являетесь решением PowerShell, которое рекурсивно находит все *.HTM файлы, заменяет "это" "который", затем сохранило файл.

gci -Include *.HTM -Recurse | % {
  (gc $_) -replace "this","that" | sc -path $_ }

Используя Ваши строки делает вещи более подвергшими пыткам, так как Вы встроили дважды - и одинарные кавычки, наряду с символами регулярного выражения. Кавычек оставляют с обратными галочками (') и regex символы с обратными косыми чертами (\).

gci -Include temp*.HTM -Recurse | % {
  (gc $_) -replace "onchange=`"document\.location `
  =`'/products/view\.html/view/`'\+this\.value",`
  "onchange=`"alert(`'Not implemented`')`" style=`"display: `
  none`"" | sc -path $_ }

Powershell включен с Windows 7 и может быть загружен для XP и выше.

Существует vbscript однофайловое решение в StackOverflow, который я отправил в ответ на, "Там какой-либо sed как утилита для cmd.exe?" Тот вопрос содержит много ответов с предложениями для командной строки Windows sed решения.

2
ответ дан 12.12.2019, 08:36

Теги

Похожие вопросы