diff --git a/check.sh b/check.sh new file mode 100644 index 00000000..2f104301 --- /dev/null +++ b/check.sh @@ -0,0 +1,72 @@ +#!/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 (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") + +if [ "$FOUND_MATCHES" -eq 0 ]; then + echo "Совпадений не найдено." +fi