77 lines
2.4 KiB
Bash
77 lines
2.4 KiB
Bash
#!/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
|