Salta al contenuto principale


SOLVED

#MastoAiuto #bash

Ho uno script (una riga sola) che prende un file di testo in input, sostituisce una certa cosa con un'altra cosa (un bip nel gcode) e scrive il risultato nell'output, tipo

sed -E "s/M117 Printing.*Layer/\nM300 S440 P100\nM117 Layer/" < $1 > $2

Se volessi sostituire DUE cose diverse (in righe diverse) cosa mi conviene fare?

Mandare il primo output su un file temporaneo, usarlo come input per fare la seconda sostituzione, mandarla in output e cancellare il temporaneo?

Questa voce è stata modificata (1 anno fa)

Tommi 🤯 reshared this.

Unknown parent

Unknown parent

rag. Gustavino Bevilacqua

@asparago

Infatti non ricordo da dove mi è uscita l'opzione "-E", che non la trovo né nella pagina man né nella pagina info.

Qui un indizio:
unix.stackexchange.com/questio…

in reply to rag. Gustavino Bevilacqua

@Rag. Gustavino Bevilacqua io passerei ad un altro sed con un pipe, tipo

sed -E "s/una cosa/una Cosa/" < $1 | sed -E "s/due cose/due Cose/" > $2

credo che ci sia modo di fare tutto con un colpo solo di awk, ma è troppo sbattito ricordarsi come :D

in reply to Elena ``of Valhalla''

@valhalla @asparago

[SOLVED] con DUE -e:

sed -e "s/M117 Printing.*Layer/\nM300 S440 P100\nM117 Layer/" -e "s/;script: PauseAtHeight.py/\nM300 S435 P500\nM300 S488 P500\nM300 S435 P500\nM300 S488 P500\nM300 S435 P500\nM300 S488 P500\n/" < $1 > $2

A vista il gcode generato funziona.

in reply to Elena ``of Valhalla''

> @GustavinoBevilacqua

> credo che ci sia modo di fare tutto con un colpo solo di awk, ma è troppo sbattito ricordarsi come :D

Io sostengo sempre l'opzione AWK! :))

Forse dovrebbe essere qualcosa del genere (se ho capito il problema):

----✀--------✀--------✀----
#!/usr/bin/env -S awk -f

/a/ { sub(/a/,"b"); print $0 }

/x/ { sub(/x/,"y"); print $0 }
----✀--------✀--------✀----

Ciao!
C.

in reply to cage

@cage @valhalla
No, per favore. Almeno per le sostituzioni di testo niente awk.
Ogni volta che devo scrivere un programma awk impazzisco.
in reply to rastinza

>
> @cage @GustavinoBevilacqua @valhalla
> No, per favore. Almeno per le sostituzioni di testo niente awk.
> Ogni volta che devo scrivere un programma awk impazzisco.

Beh, effettivamente dà il suo meglio quando devi riarrangiare l'input,
pero' non lo snobberei: la versione GNU puo' anche aprire i socket :)

gnu.org/software/gawk/manual/g…

Ciao!
C.

in reply to cage

E' sempre il problema con il software GNU:

Non capiscono mai quando e' ora di fermarsi con le features.

E comunque:

ED IS THE STANDARD TEXT EDITOR.

in reply to absc

@absc @cage @valhalla Siamo fortunati che non gli sia ancora venuto in mente di implementare emacs in awk.
in reply to absc

@AJFWuO50Cp7c1J4ybg.absc@clacson.abiscuola.org
> @rastinza @GustavinoBevilacqua
> E' sempre il problema con il software GNU:
>
>
> Non capiscono mai quando e' ora di fermarsi con le features.
>
>
> E comunque:
>
>
> ED IS THE STANDARD TEXT EDITOR.

E inoltre: there is only one true AWK :) :)

Ciao!
C.

in reply to cage

@cage @absc
"Ed" è quello che è ancora più complicato di Vi(m)...

E questo mi rimanda alle mie memorie di infanzia quando mio padre (ora pensionato) lavorava al ex CNEN (attualmente ENEA) e si fece una lunga missione negli USA.

In quest'epoca conosce un ricercatore Italiano che per non farsi fregare gli studi, si portava a casa l'intero computer e già vi lascio immaginare le dimensioni di un computer degli anni '80...

Ora che c'entra questo con questi editors?

La verità è che sono astrusamente complicati, e difficili da imparare, e sotto sotto ci vedo una certa malizia... L'intenzione di scoraggiare i più all'uso dell'ordinatore elettronico quando l'unico modo di interagire era una console/shell, e di conseguenza favorire una elite di studiosi e professionisti che non si sentivano a disagio con i suddetti editors...

:flan_think:

in reply to ❄️ freezr ❄️

Ciao!

> @cage @GustavinoBevilacqua

[...]

> In quest'epoca conosce un ricercatore Italiano che per non farsi
> fregare gli studi, si portava a casa l'intero computer e già vi
> lascio immaginare le dimensioni di un computer degli anni '80...

Ah, un tipo con molta fiducia nel prossimo, quindi! :D

>
> Ora che c'entra questo con questi editors?
>
> La verità è che sono astrusamente complicati, e difficili da
> imparare, e sotto sotto ci vedo una certa malizia... L'intenzione di
> scoraggiare i più all'uso dell'ordinatore elettronico quando l'unico
> modo di interagire era una console/shell, e di conseguenza favorire
> una elite di studiosi e professionisti che non si sentivano a
> disagio con i suddetti editors...

Bisogna anche considerare che quando nacquero, le risorse di calcolo e
di memoria erano quelle che erano e, giocoforza, qualche compromesso
lo si doveva fare. Sul mio sistema, comunque, "ed" non e' installato
piu'. :)

Ciao!
C.

in reply to cage

@cage @freezr

Meglio avere software che non si usa che non avere software che può servire… non sapevo neppure che ci fosse 😁

in reply to rag. Gustavino Bevilacqua

>
> @cage /at/freezr
>
> Meglio avere software che non si usa che non avere software che può servire… non sapevo neppure che ci fosse 😁

Lasciatemi rispolverare, allora:

gnu.org/fun/jokes/ed-msg.html

:) :) :)

Ciao!
C.

--
Non ho mai creduto troppo a nulla, poi non ho creduto assolutamente più a nulla
-- Margherita Hack

@cage
in reply to cage

@valhalla@social.gl-como.it @GustavinoBevilacqua@mastodon.cisti.org
all hail awk! \o/

per quanto awk sia fantastico, forse sed è più indicato in questo caso però ;)

(comunque ti mancherebbe un "next" dopo il primo match, l'OP chiedeva di sostituire in righe diverse :P)

in reply to Elena ``of Valhalla''

@@social.gl-como.it @asparago
Si puo' fare anche in un colpo solo di sed, volendo:

sed -E "s/una cosa/una Cosa/;s/due cose/due Cose/" < $1 > $2

Dovrebbe essere cosi' :)
in reply to absc

@absc @valhalla @asparago

Questo fa bip a ogni cambio layer e mi suona una sirena da pompieri quando devo cambiare filamento… tutto in una riga!

sed -e "s/M117 Printing.*Layer/\nM300 S440 P100\nM117 Layer/" -e "s/;script: PauseAtHeight.py/\nM300 S435 P500\nM300 S488 P500\nM300 S435 P500\nM300 S488 P500\nM300 S435 P500\nM300 S488 P500\n/" < $1 > $2

in reply to Elena ``of Valhalla''

@valhalla@social.gl-como.it @GustavinoBevilacqua@mastodon.cisti.org @@social.gl-como.it @asparago @cage@stereophonic.space

puoi anche usare più volte -e per specificare più comandi in un solo colpo per sed:

% echo foo bar | sed -e s/foo/Foo/ -e s/bar/Bar/
Foo Bar

se devi fare attenzione a non sostituire in certe righe puoi o sbizzarrirti con il match, ad esempio:

% printf '%s\n' 'foo bar' 'foo baz' | sed -e '/bar/s/foo/Foo/'
Foo bar
foo baz

(cambia "foo" con "Foo" solo nelle righe che matchano /bar/)

oppure ricorrere ad uno script sed un filino più complesso

% printf '%s\n' 'foo bar' 'foo baz' | sed 's/bar/Bar/ ; t ; s/foo/Foo/'
foo Bar
Foo baz

("t" fa un salto alla fine dello script se nella riga corrente è avvenuta una sostituzione.)

Unknown parent

rag. Gustavino Bevilacqua

@asparago

Ora ci provo…

Lo script deve prendere il gcode generato da Cura, aggiungere un bip a ogni cambio layer e una sirena da pompieri quando c'è da cambiare filamento.

Usando Cura come appimage mi mette male andare a modificare gli addon, altrimenti lo farei.

Spero che @cronomaestro prima o poi mi installi OctoPrint, così faccio tutto da lì anziché usare tre o quattro programmi separati.

Unknown parent

rag. Gustavino Bevilacqua

@asparago @cronomaestro

😄
Il gcode è un file di testo che dice alle macchine a controllo numerico (stampante 3d, fresatrice, ecc.) cosa fare.

Cura è uno "slicer" che affetta un solido e crea il gcode per stamparlo, uno strato alla volta.

Octoprint ti permette di dare degli schiaffi sul collo alla stampante 3D e farle fare quel che vuoi tu anziché dover dipendere da impostazioni predefinite.

Unknown parent

rastinza

Guarda, ci saranno tante lamentele da fare su systemd; però almeno funziona ed è moderatamente semplice da capire nonostante la marea di funzionalità che offre.
Di certo lo trovo più comodo rispetto a init + cron dove invece ti devi fare tutti gli script ad hoc per ogni programma che vuoi far girare.

Però... a che mi serve aprire socket con awk?

Questo sito utilizza cookie per riconosce gli utenti loggati e quelli che tornano a visitare. Proseguendo la navigazione su questo sito, accetti l'utilizzo di questi cookie.