grep - removendo texto após o token delimitador


12

Eu tenho um arquivo no qual preciso eliminar tudo após o primeiro ;de cada linha.

Então, um arquivo como este:

sdfsdsdf;
fsdfsddf;sdfsd;

Isso resultará em:

sdfsdsdf
fsdfsddf

Eu olhei grepe sed. Eu apreciaria uma resposta incorporando um desses comandos.

Respostas:


5

sed é provavelmente mais fácil e rápido do que awk ou perl nesta circunstância:

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
Isso é mais complicado do que deveria ser! sed 's/;.*//'
Gilles 'SO- stop being evil'

Eu peço desculpa mas não concordo. o perl -pe 's /;.*//' some_file_name é igualmente fácil, e sem dúvida até 1500% mais rápido ao operar em arquivos grandes.
codehead 24/08/10

Eu tenho vários sistemas em que o sed está disponível, mas o perl não, por isso encorajo o uso de soluções de menor peso, onde forem suficientes.
precisa

7

outra opção é usar o cutcomando

cat a.file | cut -d';' -f1

9
inútil us de gato

3

Eu normalmente uso awkpara coisas como esta:

cat a.file | awk -F=";" '{ print $1 }'

Isso pega cada linha de um arquivo e imprime o primeiro grupo antes do delimitador -F


7
uso inútil de cat.
Pausado até novo aviso.

1
Segundo Dennis lá. E no linux e BSD isso -F = ";" não funciona como pretendido. E você também pode citar esses $ 1: awk -F ";" '{print $ 1}' a.file
codehead

2

Aqui está uma maneira de fazer isso usando o GNU grep:

grep -Po "^[^;]+(?=;?)" filename

Sem o Gnu grep: grep -Eo '^[^;]+;' filenamequase entende, apenas imprime um caractere a mais. grep -Eo '^[^;]+' filenamequase consegue também, mas também imprime linhas completas (não vazias) que não possuem nenhuma ;.
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.