Ho letto alcune altre domande sulla manipolazione delle stringhe bash del piping ma sembrano essere applicazioni specializzate.
In sostanza, c'è un modo per rendere il seguito più semplice?
invece di
$ string='hello world'; string2="${string// /_}"; echo "${string2^^}"
HELLO_WORLD
qualcosa di simile a
$ echo 'hello world' | $"{-// /_}" | "${ -^^}"
HELLO_WORLD
Modifica Sono interessato a rimanere nelle manipolazioni di bash, se possibile, per mantenere la velocità (al contrario di sed / awk che hanno la tendenza a rallentare notevolmente i miei script)
Edit2: @jimmij
Mi piace il secondo esempio e mi ha portato a fare una funzione.
bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; }
echo hello world | bash_m
HELLO_WORLD
tr
manuale, allora è vero il contrario perché il tempo di generazione dei processi è trascurabile rispetto al tempo di manipolazione della stringa per cui sed
e awk
sono dedicati. Se la stringa è estremamente lunga, dite l'intero manuale di bash, allora bash può semplicemente rifiutare di procedere del tutto, a causa di alcune limitazioni interne.
sed
, awk
, tr
o simili. Guarda la risposta gena2x, che ho modificato qualche tempo fa aggiungendo esattamente queste informazioni: unix.stackexchange.com/questions/162221/… potresti voler confrontarlo con la risposta terdon alla stessa domanda in cui dà il tempo per stringhe brevi in cui la generazione del processo del caso richiede più tempo. Puoi testarlo tu stesso e pubblicare il risultato.
read x; echo $x
sia meglio per le prestazioni? La sintassi non sembra più corta o più pulita. x=${x// /_}; x=${x^^}
è un modo molto più conciso di fare la stessa cosa di {read x; echo ${x...
. Per quanto riguarda le prestazioni, @jimmij ha sottolineato che tr
/ sed
sarebbe più veloce di bash
, conteggio delle forche uguale. L'uso di una pipe comporta sempre un ulteriore processo, quindi l'argomento del salvataggio di una fork non si applica più. Quindi, se stai usando pipe, usa semplicemente sed
/ tr
ecc. Se riesci a farlo in bash, fallo e salta questa read x; echo $x
assurdità.