#!/usr/bin/env bash if [ -z "$1" ]; then echo "Использование: $0 <папка_для_поиска>" exit 1 fi TARGET_DIR="$1" if [ ! -d "$TARGET_DIR" ]; then echo "Ошибка: папка '$TARGET_DIR' не существует!" exit 1 fi echo "Поиск строк в двойных кавычках в файлах .gd (исключая комментарии)..." echo "Папка: $TARGET_DIR" echo "==========================================" FOUND_MATCHES=0 # Используем Process Substitution вместо пайплайна в цикле while IFS= read -r file; do # Используем awk для поиска строк с кавычками, исключая комментарии # и экранированные кавычки MATCHES=$(awk ' BEGIN { line_num = 0 } { line_num++ original_line = $0 line = $0 # Ищем первый #, который не находится внутри кавычек in_quote = 0 for (i = 1; i <= length(line); i++) { char = substr(line, i, 1) prev_char = substr(line, i-1, 1) # Если находим неэкранированную кавычку, меняем состояние if (char == "\"" && prev_char != "\\") { in_quote = !in_quote } # Если находим # вне кавычек, обрезаем строку до этого места if (char == "#" && !in_quote) { line = substr(line, 1, i-1) break } } # Удаляем начальные и конечные пробелы gsub(/^[[:space:]]+|[[:space:]]+$/, "", line) if (index(original_line, "\"\"\"") > 0) { # Ищем непустые строки с двойными кавычками if (line ~ /"[^"\\]*"/) { print line_num ": " original_line } } } ' "$file") if [ -n "$MATCHES" ]; then FOUND_MATCHES=1 echo "Файл: $file" echo "$MATCHES" | while IFS= read -r match_line; do echo " Строка $match_line" done echo "" fi done < <(find "$TARGET_DIR" -type f -name "*.gd" -not -path "./addons/*") if [ "$FOUND_MATCHES" -eq 0 ]; then exit 0 fi exit 1