[Risolto] Replace di una stringa in tutti i file di una cartella

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

[Risolto] Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

Gentilissimi,
Dovrei cambiare una stringa in tutti i file di una cartella. In poche parole devo sostituire tutte le occorrenze di http://central.maven.org/maven2/ ed anche http://repo1.maven.org/maven2/ con https://repo1.maven.org/maven2/.

Nel web dicono di fare così:

Codice: Seleziona tutto

TRY THIS:
find . | xargs grep -s central.maven.org | cut -f1 -d : | xargs sed -i '' -e "s/http:\/\/central/https:\/\/repo1/g"
AND THEN: 
find . | xargs grep -s repo1.maven.org | cut -f1 -d : | xargs sed -i '' -e "s/http:\/\/repo1/https:\/\/repo1/g"
Tuttavia, nel chiamare questi comandi, il terminale mi dice:

Codice: Seleziona tutto

sed: can't read : no such file or directory
Qualcuno protrebbe aiutarmi a sistemare questa cosa per cortesia?

EDIT : a quanto pare il problema stava nel fatto che i comandi proposti QUI sono per MAC e non per Linux. Su Linux il comando sed ha una sintassi leggermente diversa.
Ultima modifica di kew il lunedì 9 marzo 2020, 15:48, modificato 2 volte in totale.
Avatar utente
giulux
Amministratore
Amministratore
Messaggi: 25422
Iscrizione: domenica 10 gennaio 2010, 12:17
Desktop: ubuntu 18.04
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Sesso: Maschile
Località: Roma

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da giulux »

Sposto in programmazione.
Dilemmi non è per problemi tecnici.
Leggete per favore la descrizione delle varie sezioni prima di postare, grazie.
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da UbuNuovo »

Ma lo devi eseguire su Mac? Se sì, nel comando sed devi usare -i '', su Linux no!
Io aggiungerei in find la directory da elaborare (NOME_DIR) e cercherei solo i file (-type f):

Codice: Seleziona tutto

find NOME_DIR -type f | xargs grep -s central.maven.org | cut -f1 -d : | xargs sed -i "s/http:\/\/central/https:\/\/repo1/g"
find NOME_DIR -type f | xargs grep -s repo1.maven.org | cut -f1 -d : | xargs sed -i "s/http:\/\/repo1/https:\/\/repo1/g"
Occhio, l'opzione -i fa le sostituzioni direttamente, prova il codice su una copia della directory.
Naturalmente devi sostituire NOME_DIR con il nome della directory contenente i file da elaborare.
Puoi mettere il percorso assoluto o relativo, se esegui il codice dalla directory contenente NOME_DIR, basta inserire solo il nome della directory.
Salva l'Ucraina! 🇺🇦
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

UbuNuovo ha scritto:
lunedì 9 marzo 2020, 14:08
Ma lo devi eseguire su Mac? Se sì, nel comando sed devi usare -i '', su Linux no!
Devo eseguire su Linux. Stando a questa guida, devo comunque metterlo -i. E infatti mi verrebbe:

Codice: Seleziona tutto

find . -type f -print0 | xargs -0 sed -i 's|http://central.maven.org/maven2/|https://repo1.maven.org/maven2/|g'
find . -type f -print0 | xargs -0 sed -i 's|http://repo1.maven.org/maven2/|https://repo1.maven.org/maven2/|g'
Ma perché è diverso da quello che hai scritto tu?
Puoi mettere il percorso assoluto o relativo, se esegui il codice dalla directory contenente NOME_DIR, basta inserire solo il nome della directory.
In questo caso starei già dentro la cartella NOME_DIR
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da UbuNuovo »

Sì, -i ci vuole, ma non serve -i '' -e
Ho usato, pari pari, il codice che avevi postato eccetto le modifiche a find e alla opzione di sed.
Salva l'Ucraina! 🇺🇦
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

UbuNuovo ha scritto:
lunedì 9 marzo 2020, 14:29
Sì, -i ci vuole, ma non serve -i '' -e
Ho usato, pari pari, il codice che avevi postato eccetto le modifiche a find e alla opzione di sed.
Quindi mi stai dicendo che " macOS utilizza la versione BSD", ed è per questo che sul mio Kubuntu non funzionava?
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da UbuNuovo »

S', credo di si, non ho un Mac ma ho visto varie volte quella sintassi.
Comunque anch'io avrei scritto il codice come il tuo ultimo postato, a meno che ci siano tanti file che non necessitano di sostituzioni, in quel caso meglio lasciare grep.
Salva l'Ucraina! 🇺🇦
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

Ah. Grazie mille, adesso provo.
UbuNuovo ha scritto:
lunedì 9 marzo 2020, 14:49
Comunque anch'io avrei scritto il codice come il tuo ultimo postato, a meno che ci siano tanti file che non necessitano di sostituzioni, in quel caso meglio lasciare grep.
Se non ti scoccio troppo potrei chiederti perché?
Avatar utente
wilecoyote
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 15349
Iscrizione: giovedì 20 agosto 2009, 16:21
Desktop: Kubuntu et alii
Distribuzione: 9.04 32bit 14/18/20/22.04 LTS 64bit
Sesso: Maschile
Località: Ceranesi - Ge

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da wilecoyote »

) Salve, giusto per completezza, se usi Kubuntu la stessa operazione la puoi svolgere più semplicemente per via grafica usando il programma KFileReplace.

:: Ciao
ACER Extensa 5230E 2,2 Ghz cpu Celeron 900 hdd 160 GB Ram 1 GB scheda video Intel GM500
ACER Extensa 5635Z 2,2 Ghz cpu Celeron T3100 hdd 320 GB Ram 4 GB scheda video Intel Mobile 4
Quando una Finestra chiusa incontra un Pinguino la Finestra chiusa è una Finestra aperta.
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

wilecoyote ha scritto:
lunedì 9 marzo 2020, 15:07
) Salve, giusto per completezza, se usi Kubuntu la stessa operazione la puoi svolgere più semplicemente per via grafica usando il programma KFileReplace.

:: Ciao
ah
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: [Risolto] Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

Comunque ora non da più errore. Grazie mille!
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: Replace di una stringa in tutti i file di una cartella

Messaggio da UbuNuovo »

kew ha scritto:
lunedì 9 marzo 2020, 14:55
Ah. Grazie mille, adesso provo.
UbuNuovo ha scritto:
lunedì 9 marzo 2020, 14:49
Comunque anch'io avrei scritto il codice come il tuo ultimo postato, a meno che ci siano tanti file che non necessitano di sostituzioni, in quel caso meglio lasciare grep.
Se non ti scoccio troppo potrei chiederti perché?
Prima non potevo risponderti.
Probabilmente avrei dovuto scrivere "forse con grep..." ; l'ho detto credendo che grep fosse più veloce di sed a filtrare un file, in realtà non lo so, bisognerebbe fare qualche prova con molti file voluminosi, ma oggi non posso. Se ne hai voglia... 8-)

Io avrei fatto uno script così:

Codice: Seleziona tutto

#!/bin/bash

dir=NOME_DIR
while read -d $'\0' f; do
	grep -Eq 'central\.maven\.org|repo1.maven.org' "$f" || continue
	sed -i 's@http://central\.maven\.org/maven2/\|http://repo1\.maven\.org/maven2/@https://repo1.maven.org/maven2/@g' "$f"
done < <(find "$dir" -type f -print0)
Poi se vedi che l'uso di grep non velocizza niente si può eliminare la riga grep -q 'central\.maven\.org' "$f" || continue
Ultima modifica di UbuNuovo il lunedì 9 marzo 2020, 16:50, modificato 2 volte in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: [Risolto] Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

ahah ti ringrazio, ma ora non è proprio il caso di mettersi a smanettare. Già sto impazzendo per risolvere questi problemi con software che non funzionano, non voglio crearmene di nuovi!
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Risolto] Replace di una stringa in tutti i file di una cartella

Messaggio da UbuNuovo »

Ok, qualche volta, se me lo ricordo provo.
Ho corretto la riga con grep per le due condizioni, ne avevo messa solo una.
Ciaux
Salva l'Ucraina! 🇺🇦
Avatar utente
kew
Prode Principiante
Messaggi: 62
Iscrizione: mercoledì 28 ottobre 2015, 22:41
Desktop: plasma
Distribuzione: Kubuntu 22.04
Sesso: Maschile

Re: [Risolto] Replace di una stringa in tutti i file di una cartella

Messaggio da kew »

:birra: ciao!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 9 ospiti