У меня есть ряд 5000 + файлы, что я должен выполнить в простом поиске и замене. Я делал его в текстовом редакторе (EditPlus) путем открытия 500 файлов за один раз, выполнения глобального поиска / замена, сохранения всех, закрытия, и т.д. Но, это занимает буквально часы, чтобы сделать, и это скучно и утомительно, и я уже сделал это однажды сегодня и должен сделать это снова, потому что все файлы были обновлены. Существует ли способ сделать это через командную строку Bash? Вот детали:
Найти onchange="document.location ='/products/view.html/view/'+this.value"
Замените его onchange="alert('Not implemented')" style="display: none"
Все файлы имеют.HTM расширение, но они вкладываются в нескольких подкаталогах.
РЕДАКТИРОВАНИЕ - я нахожусь на Mac и предпочел бы *, отклоняют базирующееся решение.
Основная команда для Вас случается, похож на это:
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
Так как 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 решения.