Como posso remover todo o texto após um caractere, neste caso, dois pontos (":"), no bash? Também posso remover o cólon? Eu não tenho idéia de como.
147
Um exemplo pode ter sido útil, mas se eu entendi corretamente, isso funcionaria:
echo "Hello: world" | cut -f1 -d":"
Isso converterá "olá: mundo" em "olá".
cut
funciona, mas a resposta de Dennis é melhor e mais flexível. Alguém sabe se gera um novo processo comocut
?basename
ecut
, ver a resposta de Dennis abaixocut
pode ler do stdin, por isso é melhor, especialmente quando você tem uma sequência muito longa que precisa processar, como o conteúdo de um arquivo.hello: world
. Isso é meia resposta.No Bash (e ksh, zsh, dash, etc.), você pode usar a expansão de parâmetros com a
%
qual removerá os caracteres do final da string ou os#
caracteres do início da string. Se você usar um único desses caracteres, a menor string correspondente será removida. Se você dobrar o personagem, o mais longo será removido.fonte
hello:world
se tornarhello:wo
usando${a%:*}
?"${a##*:}"
para recebendo apenastomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ padrão]]; eco "$ {BASH_REMATCH [1]}" `. Isso corresponde apenas se houver dois pontos. Se você deseja que isso seja opcional, um padrão diferente teria que ser usado. Uma explicação das expressões regulares do Bash (e das expressões regulares em geral) está além do escopo desses comentários. Você pode encontrar outras perguntas que discutam isso ou publique as suas.fonte
fonte
egrep
é grep com-E
. Aqui não faz diferença do normalgrep
.-o
instrui o grep a imprimir apenas a parte da linha que corresponde à expressão.^
ancora a partida no início de uma linha.[^:]*
corresponde a zero ou mais caracteres que não são o:
caractere.:
corresponde ao personagem:
.Digamos que você tenha um caminho com um arquivo neste formato:
Agora você deseja apenas o caminho que inclui quatro "/". Tipo
e sua saída será
A vantagem de usar o cut é que você também pode cortar o diretório mais atual e o arquivo (neste exemplo); portanto, se você digitar
sua saída seria
Embora você possa fazer o mesmo do outro lado da string, não faria muito sentido nesse caso, como digitar
resulta em
Em alguns outros casos, o último caso também pode ser útil. Lembre-se de que não há "/" no início da última saída.
fonte
aparar tudo após a última instância de ":"
e se você quiser largar esse último ":"
@ kp123: você gostaria de substituir
:
por/
(onde o cólon sed deve estar\/
)fonte