Предположим, у меня есть папка с большим количеством php-файлов, и некоторые из этих php-файлов содержат строку, содержащую определенное слово, мне нужна командная строка linux, которая находит все файлы с этими строками (которая содержит определенное слово) и заменяет эта строка с другим словом
например:
$source = $_FILES['fupload']['tmp_name'];
$target = "upload/".$_FILES['fupload']['name'];
move_uploaded_file( $source, $target );// or die ("Couldn't copy");
$size = getImageSize( $target );
В приведенном выше коде, который является частью php-файла, предположим, что определенное слово — «fupload», и мы хотим заменить эту строку на «echo», после запуска командной строки linux она становится такой:
echo
$target = "upload/".$_FILES['fupload']['name'];
move_uploaded_file( $source, $target );// or die ("Couldn't copy");
$size = getImageSize( $target );
и этот процесс выполняется для всех файлов phph, которые имеют эту ситуацию.
Я нашел этот код, но этот код удаляет только те строки, которые содержат определенное слово, но мне нужно заменить все эти строки другим словом:
find /var/www/website -type f -exec sed -i '/$vjfegamd/d' {} ';'
Заменить только первый случай fupload
(как в вашем примере кода), попробуйте это:
find . -name '*.php' -print0 -exec sed -i.bak '0,/fupload/c echo' {} \;
c
Команда изменяет всю строку на строку, следующую за командой.
Перед редактированием все файлы сохраняются с .bak
расширение.
Поскольку некоторые ароматизаторы седана требуют c
чтобы следовать с новой строкой, вы можете попробовать эту для того же результата:
find . -name '*.php' -print0 -exec sed i.bak '0,/fupload/s//echo/' {} \;
Других решений пока нет …