Como posso excluir o texto antes de um delimitador no Linux?

16

Preciso excluir o texto de uma linha antes do delimitador.

Por exemplo:

(123434): hello::{apple,orange,mango}.

Preciso excluir o texto antes do primeiro : . ou seja, (123434) .

Existe algum comando no linux para executar esta tarefa?

    
por user80538 11.08.2014 / 22:50

3 respostas

13

Este comando sed deve fazer o truque. O seguinte comando irá sobrescrever o arquivo:

sed -i 's/^[^:]*:/:/' file

Para imprimir apenas a saída, remova o sinalizador -i . Para colocar a saída em um novo arquivo, remova o sinalizador -i e redirecione a saída:

sed 's/^[^:]*:/:/' file > new_file
    
por 11.08.2014 / 22:56
13

Você pode usar cut :

echo '(123434): hello::{apple,orange,mango}.' | cut -d: -f2-
    
por 11.08.2014 / 23:42
4

Você pode fazer isso com uma instrução Bash bem simples:

mytext="(123434): hello::{apple,orange,mango}."

echo ${mytext#*)}

Isso imprimirá : hello::{apple,orange,mango}. . Você pode cortar prefixos e sufixos de maneira semelhante. Além disso, as definições de prefixo e sufixo podem conter curingas.

Corte o prefixo - até o primeiro prefixo de correspondência de curinga: ${variable#prefix}

Prefixo de corte - até a última correspondência de curinga de prefixo: ${variable##prefix}

Cortar sufixo - até a correspondência de curinga com primeiro sufixo: ${variable%suffix}

Cortar sufixo - até a correspondência do último curinga com sufixo: ${variable%%suffix}

Pode parecer incerto à primeira vista, veja o exemplo a seguir:

mytext="xAxBxAxBx"
echo ${mytext#*A}    # will print: xBxAxBx
echo ${mytext##*A}   # will print: xBx
echo ${mytext%B*}    # will print: xAxBxAx
echo ${mytext%%B*}   # will print: xAx
echo ${mytext%%C*}   # will print: xAxBxAxBx

No último exemplo, o padrão não corresponde, então nada é cortado.

    
por 12.08.2014 / 00:28