Найти и заменить

Ответить
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Найти и заменить

Сообщение ya »

Код: Выделить всё

#!/bin/bash

find /путь/где/искать -type f -name '*.torrent' -print0 | xargs --null perl -pi -e 's/что ищем/чем заменяем/'
sed -i 's/что ищем/чем заменяем/' /путь/где/искать/*.torrent
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: Найти и заменить

Сообщение ya »

Для поиска определённой строки или текста в нескольких файлах
https://wiki.merionet.ru/articles/rukovodstvo-po-komande-grep-v-linux по ссылке рассмотрены регулярные выражения

Код: Выделить всё

grep -r "ваш_текст" /path/to/directory
Чтобы искать только в файлах с определённым расширением (например, .txt или .log), вы можете использовать --include:

Код: Выделить всё

grep -r --include="*.txt" "ваш_текст" /path/to/directory
Чтобы сделать поиск нечувствительным к регистру, добавьте флаг -i
Чтобы выводить номера строк, на которых найден текст, воспользуйтесь -n
Если вам нужно только имена файлов, в которых найден указанный текст, используйте -l

поиск по нескольким строкам

Код: Выделить всё

grep -e 'Class 1' -e 'Todd' Students.txt
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: Найти и заменить

Сообщение ya »

Код: Выделить всё

find /путь/где/ищем -name "*искомый фрагмент имени файла или каталога*"
ya
^-^
Сообщения: 2535
Зарегистрирован: 16 дек 2021, 19:56

Re: Найти и заменить

Сообщение ya »

search_replace_lib.sh

Код: Выделить всё

#!/bin/bash

# Функция для поиска и замены
# Аргументы:
# $1 - строка поиска
# $2 - строка замены (может быть пустой)
# $3 - расширения файлов через запятую (например: php,json)
search_and_replace() {
  local search_string="$1"
  local replacement="$2"
  local extensions="$3"

  # Преобразуем расширения в формат, пригодный для find
  IFS=',' read -ra ext_array <<< "$extensions"

  # Формируем условие поиска по расширениям
  local name_conditions=()
  for ext in "${ext_array[@]}"; do
    name_conditions+=("-name" "*.${ext}")
  done

  # Ищем файлы с заданными расширениями
  find . -type f \( "${name_conditions[@]}" \) -print0 | while IFS= read -r -d '' file; do
    # Ищем первую строку с содержимым
    line_info=$(grep -n -m 1 -F "$search_string" "$file")
    if [ -n "$line_info" ]; then
      line_number=$(echo "$line_info" | cut -d: -f1)
      line_content=$(echo "$line_info" | cut -d: -f2-)
      if [ -n "$replacement" ]; then
        # Замена в файле
        sed -i "${line_number}s/$search_string/$replacement/" "$file"
        echo "Заменено в файле: $file, строка: $line_number"
      else
        # Вывод информации
        echo "Файл: $file, строка номер $line_number: $line_content"
      fi
    fi
  done
}

# Пример вызова функции:
# search_and_replace "искомая строка" "замена" "php,json"
# Для поиска и замены
search_and_replace "строка поиска" "строка замены" "php,json"

# Для поиска только информации (без замены)
search_and_replace "строка поиска" "" "php,json"

Подключение в качестве библиотеки

Код: Выделить всё

#!/bin/bash

# Подключение библиотеки
source /путь/к/search_replace_lib.sh

# Использование функции
search_and_replace "строка поиска" "строка замены" "php,json"
или, если скрипт находится в текущей директории

Код: Выделить всё

source ./search_replace_lib.sh
Ответить