Removendo strings específicas do arquivo

5

Eu tenho um arquivo contendo alguns dados, como no exemplo a seguir:

data1: it is my data
data2: some more data
data3: even some more data

O que eu quero é a seguinte saída em outro arquivo:

it is my data
some more data
even some more data

Por favor me guie como fazer isso!

    
por Naseer Ahmed 08.03.2014 / 18:27

6 respostas

9

Isso deve funcionar:

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

Explicação: O -i .bak editará o arquivo e criará um backup do original chamado filename.bak . s/pat/replacement/ significa substituir pat por replacement . [^:]*: * significa corresponder à sequência mais longa de caracteres que não são : , seguido por : e um ou mais espaços. O resultado final é que ele excluirá tudo até o primeiro : e os espaços seguintes.

Essa abordagem tem a vantagem de trabalhar com data: ou foo: ou qualquer outra coisa e também funcionará se você tiver vários : na mesma linha. Por exemplo, pode lidar com isso:

data: a line that contains : a colon!
    
por terdon 08.03.2014 / 18:48
8

É muito simples usar awk :

awk -F ': ' '{for (i=2; i<=NF; i++) print $i}' file_name > new_file_name

Cada linha é separada em mais campos usando ': ' como separador e imprime tudo, exceto o primeiro campo. A saída é redirecionada para o new_file_name .

    
por Radu Rădeanu 08.03.2014 / 18:32
4

Isso parece um trabalho para cut

cut -d: -f2- file > new_file
    
por Martin Heller 08.03.2014 / 23:48
1

Você pode usar o Vim no modo Ex:

ex -sc '%s/[^:]*: *//|x' file
  1. % pesquisar todas as linhas

  2. s substituto

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 21:14
0

Abra o arquivo no editor vim da seguinte forma:

vi <filename>

e, em seguida, pressione esc e, em seguida, o seguinte:

:%s/data.: //gc

Aqui %s é usado para substituir string

/ é o delimitador entre o comando e as strings

data.: é a primeira string, . é usada para qualquer caractere único gc é usado para encontrar e confirmar antes de substituir

    
por jobin 08.03.2014 / 18:32
0

Seu arquivo de entrada parece uma saída de um comando grep, por exemplo:

grep data data*

Se este for realmente o caso, você pode usar a opção -h do próprio comando grep para obter o que você precisa:

grep -h data data*
    
por Guru 09.03.2014 / 03:35