Remova tudo de um arquivo de texto entre “:” e “\ n”

2

Eu tenho um arquivo de texto grande (263 linhas) que contém linhas como estas:

image_name.jpg: *lots of spaces* JPEG image data, JFIF standard 1.01, resolution (DPI), density 96x96, segment length 16, baseline, precision 8, 1024x768, frames 3 \n
image_name.jpg: *lots of spaces* JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: "CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 70", progressive, precision 8, 960x540, frames 3 \n
image_name.png: *lots of spaces* PNG image data, 752 x 760, 8-bit/color RGBA, non-interlaced \n

Como posso remover todo o texto entre : e \ n de uma só vez?

    
por Weylyn Savan 02.12.2017 / 22:11

2 respostas

6

Com cut :

cut -d: -f1 file

Com sed :

sed -e 's/:.*//' file

Com awk :

awk -F: '{print $1}' file

Com GNU grep ou muitos BSD grep s (mas não POSIX grep ):

grep -o '^[^:]*' file

cut é o mais curto.

Se você quiser modificar o arquivo in-loco, seu sed pode ter uma opção -i que faz isso - mas como isso funciona depende da sua plataforma. Caso contrário, > file2 && mv file2 file no final de qualquer um deles funcionará.

Como alternativa, com ed , no local em todos os locais:

printf ',s/:.*/\nw\n' | ed file
    
por 02.12.2017 / 22:18
2

ObPerl:

perl -pe 's/:.*//' file

ou no local, deixando um arquivo de backup:

perl -i.bak -pe 's/:.*//' file
    
por 02.12.2017 / 22:24