#!/bin/bash # Controlla che sia stato fornito almeno un argomento if [ $# -lt 1 ] || [ $# -gt 2 ]; then echo "Uso: $0 [s] file.tex" echo " - Se viene passato 's' come primo argomento, sovrascrive il file originale." echo " - Altrimenti, crea un nuovo file con '-modificato' nel nome." exit 1 fi # Determina se sovrascrivere o meno if [ "$1" == "s" ]; then overwrite=true input_file="$2" else overwrite=false input_file="$1" fi # Verifica se il file esiste if [ ! -f "$input_file" ]; then echo "Errore: Il file '$input_file' non esiste!" exit 1 fi # Se non si sovrascrive, crea un nuovo nome file if [ "$overwrite" = false ]; then output_file="${input_file%.tex}-modificato.tex" else output_file="$input_file" fi # Variabile per tenere traccia se siamo dentro un blocco lstlisting inside_lstlisting=0 # Creiamo un file temporaneo per la modifica temp_file=$(mktemp) # Legge il file riga per riga while IFS= read -r line; do # Controlla se inizia un blocco lstlisting if [[ "$line" =~ \\begin\{lstlisting\} ]]; then inside_lstlisting=1 fi # Se siamo dentro lstlisting, non modificare la riga if [ $inside_lstlisting -eq 1 ]; then echo "$line" else # Sostituzione solo fuori dai blocchi lstlisting echo "$line" | sed -E 's/"([^"]+)"/\\enquote{\1}/g' fi # Controlla se termina un blocco lstlisting if [[ "$line" =~ \\end\{lstlisting\} ]]; then inside_lstlisting=0 fi done < "$input_file" > "$temp_file" # Se deve sovrascrivere, sostituisce il file originale if [ "$overwrite" = true ]; then mv "$temp_file" "$input_file" echo "File sovrascritto: $input_file" else mv "$temp_file" "$output_file" echo "File convertito: $output_file" fi