Sto cercando di fare un po 'di ricerca e sostituzione su una variabile usando l'espansione del parametro $ {VAR // cerca / sostituisci}. Ho una PS1 piuttosto lunga e malvagia, che voglio capire dopo le dimensioni. Per fare ciò devo rimuovere un sacco di sequenze di escape che inserisco. Tuttavia, nel tentativo di rimuovere tutte le sequenze SGR ANSI CSI, ho riscontrato un problema con la mia sintassi.
Data la mia PS1 di:
PS1=\[\033]0;[\h] \w\007\]\[\033[1m\]\[\033[37m\](\[\033[m\]\[\033[35m\]\u@\[\033[m
\]\[\033[32m\]\h\[\033[1m\]\[\033[37m\]\[\033[1m\])\[\033[m\]-\[\033[1m\](\[\033[m
\]\t\[\033[37m\]\[\033[1m\])\[\033[m\]-\[\033[1m\](\[\033[m\]\[\033[36m\]\w\[\033[1m
\]\[\033[37m\])\[\033[35m\]${git_branch}\[\033[m\]\n$
(sì è malato lo so ...)
Sto provando a fare:
# readability
search='\\\[\\033\[[0-9]*m\\\]'
# do the magic
sane="${PS1//$search/}"
Tuttavia, questi sembrano essere avidi al punto di [0-9]
(quasi come se [0-9]
fosse trattato come un .
invece):
echo "${PS1//$search/}"
\[\033]0;[\h] \w\007\]\n$
Se rimuovo il *
, e cambio [0-9]
a [0-9][0-9]
(dato che è più illustrativo) mi avvicino al risultato atteso:
$ search='\\\[\\033\[[0-9][0-9]m\\\]'
$ echo "${PS1//$search/}"
\[\033]0;[\h] \w\007\]\[\033[1m\](\[\033[m\]\u@\[\033[m\]\h\[\033[1m
\]\[\033[1m\])\[\033[m\]-\[\033[1m\](\[\033[m\]\t\[\033[1m\])\[\033[m\]-\[\033[1m
\](\[\033[m\]\w\[\033[1m\])$(git_branch)\[\033[m\]\n$
Perché lo *
(zero o più) sta facendo cose folli? mi sto perdendo qualcosa qui? Se passo lo stesso regex attraverso sed ottengo il risultato atteso:
echo $PS1 | sed "s/$search//g"
\[\033]0;[\h] \w\007\](\u@\h)-(\t)-(\w)$(git_branch)\n$
*([0-9])
è l'equivalente [0-9]*
dell'uso extglob
.
extglob
influenza il comportamento di corrispondenza del modello.