Sei que perguntas semelhantes já foram feitas antes, mas não encontrei detalhes específicos para minha pergunta.
Gostaria que todas as pastas correspondentes a 'dev' tivessem uma cor de destaque no meu prompt .
billy@www ~folder/dev>
deveria ficar verde 'dev', por exemplo.
Existe uma expressão regular simples que faça isso?
Comece com o código de formatação ANSI que torna o texto regular verde (
32
) e talvez também em negrito (1
):As 8 cores básicas são
30
-32
, com suas versões brilhantes em90
-92
, e1
sendo "forte", ou seja, "ousado e/ou brilhante" (o efeito real varia entre os terminais).Encontre algum comando que faça a correspondência real da expressão regular para adicionar esses códigos de formatação ao redor das palavras especificadas:
&
substituição em sed (e$&
em perl) significa "a correspondência inteira", o que pode estar\0
em algumas outras ferramentas de regex. (Além disso, no primeiro caso, o próprio sed não se expandirá\e
para o caractere ESC, então$'...'
aspas são usadas para fazer o shell fazer isso de antemão.)Estender a regex para corresponder a várias palavras e/ou adicionar delimitadores de regex de "limite de palavra" é deixado como um exercício para o leitor.
Isso pode ser feito em Bash puro, usando sua
${var//old/new}
substituição sem uma regex, desde que você tenha apenas algumas correspondências – mas não há uma boa maneira de corresponder aos limites das palavras, apenas soluções alternativas:(...ou usando
[[ $PWD =~ ... ]]
and${BASH_REMATCH}
, embora não tenha uma operação de "substituição" real, então a única maneira que consegui descobrir seria destacar apenas a 1ª correspondência, em vez de todas elas.)Coloque o comando em uma função Bash e, ao mesmo tempo, certifique-se de envolver cada código de formatação com
\x01
and\x02
– necessário para informar ao Bash quais partes da saída são invisíveis , pois ele precisa saber disso para calcular corretamente a "largura visível" do prompt.Chame a função do shell
PS1
, certificando-se de colocar aspas ou escapar a substituição para que ela não seja expandida no momento da atribuição – o Bash fará uma segunda passagem de expansão ao exibir o prompt:Se você também quiser recuperar a
~
substituição, faça isso em algum lugar na função mypwd – como código shell ou como código Perl.Como antes, o shell
${var/old/new}
é usado para fazer uma substituição de string exata para$HOME/
with,~/
pois isso é mais fácil do que colocar corretamente um caminho como parte de uma regex. (Nesse caso,${var/#old/new}
corresponde apenas ao início.)