%20em%20um%20arquivo%20de%20texto%20ap%C3%B3s%20um%20padr%C3%A3o%20de%20caracteres%20(incluindo%20o%20padr%C3%A3o)%3F.png)
Basicamente eu preciso do que o OP desta questão conseguiu, mas não quis. Como deletar tudo após um determinado padrão ou string em um arquivo?
Então obtive dados como:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
Então, o que eu quero é deletar todo o monte de pontos (e os números) após o espaço.
Até agora, tentei usar o comando do OP lá, mas não funcionou como eu esperava porque exclui tudo após o primeiro ponto que encontra. O que significa que o ponto nos dados do tipo Somethinelse Inc. também foi excluído.
Tentei fazer com que a primeira resposta (sed) dessa pergunta funcionasse, 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 ser excluído ou restarem três pontos.
A segunda resposta (ex -sc ...) funcionou como o OP queria, mas deixou alguns pontos para mim, então também não tive sorte.
Também tentei ajustar o comando desta resposta, mas também falhei.Como posso deletar tudo até um padrão e tudo depois de outro padrão de uma linha?
Responder1
sed 's/ \.\..*$//' /path/to/file
Deveria trabalhar:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
Responder2
Outra solução, mas 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,}
corresponder a um ponto por duas ou mais ocorrências[0-9]
combinar todos os dígitoss/expr//g
significa substituto combinadoexpr
com nada, tanto quanto você puder (g)
Responder3
Que tal agora:
sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'
que significa:
um+para+muitos(+)pontos(\.)E zero para muitos(*)espaços( )E um+para+muitos(+) dígitos([[:dígito:]])E apenas no caso de qualquer(*) espaço em branco ([[:espaço:]])AND Fim desta linha ($)
Testado com (observe que inseri "...234" na segunda linha e guias/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$