sed 's/ \.\..*$//' /path/to/file
deve funcionar:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
Basicamente, eu preciso do que o OP dessa pergunta tem, mas não quer. Como apagar tudo depois de um determinado padrão ou uma string em um arquivo?
Então eu peguei os dados como:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
Então, o que eu quero é excluir todo o grupo de pontos (e os números) após o espaço.
Até agora, tentei usar o comando do OP, mas ele não funcionou como eu esperava, porque ele exclui tudo após o primeiro ponto que encontra. O que significa que o ponto nos dados do tipo Somethinelse Inc. também é excluído.
Eu tentei fazer a primeira (sed) resposta a partir dessa questão, substituindo o primeiro .com por três pontos e o segundo por um espaço vazio, mas falhei. Desta vez, tudo após o primeiro espaço é apagado ou restam três pontos.
A segunda resposta (ex-sc ...) funcionou como o OP queria, mas deixa alguns pontos para mim, então eu também não tive sorte.
Eu também tentei ajustar o comando a partir desta resposta, mas também falhei nisso. Como posso excluir tudo até um padrão e tudo depois de outro padrão de uma linha?
Outra solução, menos deselegante, poderia ser:
cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file
onde:
-E
Interpretar expressões regulares como expressões regulares estendidas (modernas) [\.]{2,}
corresponde a um ponto por duas ou mais ocorrências [0-9]
corresponde a todos os dígitos
s/expr//g
significa substituir expr
com nada o máximo que você puder (g)
Que tal isso:
sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'
o que significa:
one+to+many (\+) dots (\.) AND zero-to-many (*) spaces ( ) AND one+to+many (\+) digits([[:digit:]]) AND just-in-case any (*) whitespace ([[:space:]]) AND End of this line ($)
Testado com (observe que eu inseri "... 234" na segunda linha e tabulação / espaços à direita):
Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>
E o resultado:
xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something
An ...234 other one
Somethingelse Inc.
xb@dnxb:/tmp$
Tags text-processing awk sed