AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1800229
Accepted
black-clover
black-clover
Asked: 2023-07-27 06:35:48 +0800 CST2023-07-27 06:35:48 +0800 CST 2023-07-27 06:35:48 +0800 CST

como excluir todas as palavras que começam com uma string específica em um arquivo?

  • 772

Como posso excluir todas as palavras em um arquivo começando com uma string específica (neste caso, a string "end") para que:

<region> sample=PDL UP IN-A-1.flac lokey=21 hikey=21 lovel=0 hivel=21 end=423471 pitch_keycenter=21  
<region> sample=PDL UP IN-A-1_0001.flac lokey=21 hikey=21 lovel=22 hivel=42 end=370196 pitch_keycenter=21  
<region> sample=PDL UP IN-A-1_0002.flac lokey=21 hikey=21 lovel=43 hivel=63 end=362268 pitch_keycenter=21

Torna-se:

<region> sample=PDL UP IN-A-1.flac lokey=21 hikey=21 lovel=0 hivel=21 pitch_keycenter=21  
<region> sample=PDL UP IN-A-1_0001.flac lokey=21 hikey=21 lovel=22 hivel=42 pitch_keycenter=21  
<region> sample=PDL UP IN-A-1_0002.flac lokey=21 hikey=21 lovel=43 hivel=63 pitch_keycenter=21 

usando a linha de comando

Tentei:

sed 's/\S*\(end\|END\)\S*//g' file.txt

Mas não funcionou.

Obrigado.

linux
  • 4 4 respostas
  • 29 Views

4 respostas

  • Voted
  1. Best Answer
    PickledPenguins
    2023-07-27T07:02:50+08:002023-07-27T07:02:50+08:00

    Você estava bem perto. A maior coisa que você estava perdendo era ativar o regex estendido.

    Em segundo lugar, você tem "\S*" no início da partida. Na verdade, isso não faz nada, pois permite correspondências "um ou zero" em qualquer coisa, exceto um espaço. Como "end" sempre começa em um espaço, isso nunca será usado. Acredito que você quis dizer que "end" é o início da palavra, que é um caractere "<".

    Aqui está uma versão de trabalho:

    sed -E 's/\<(end|END)\S*//g' file.txt

    Mas pode melhorar um pouco. Aqui, tornei a correspondência de maiúsculas e minúsculas insensível para remover o "ou" da palavra e, assim, remover a necessidade de regex estendido. Eu também adicionei um "\s" à direita para remover o espaço à direita (evita um espaço duplo na lacuna).

    sed 's/\<END\S*\s//gi' file.txt

    Aqui está um guia sobre sed do GNU para referência.

    Atualizar

    Com base no seu comentário abaixo, parece que todos nós não entendemos o que você queria. Parece que você queria não apenas remover esses campos de texto, mas também fazer isso no próprio arquivo. Embora eu peça desculpas por ter perdido esse ponto, esta é uma boa lição sobre por que é tão importante formular sua pergunta para perguntar exatamente o que você deseja.

    De qualquer forma, sua solução (para adicionar > arquivo.txt) substitui efetivamente o arquivo antigo pelo novo texto. Especificamente, o sed enviará o resultado para stdout (seu terminal). O símbolo ">" é chamado de redirecionamento. Ele redirecionará o stdout antes dele para o que estiver depois dele. Isso realmente removerá o arquivo existente e o substituirá por um novo.

    Enquanto isso funciona, não é o melhor. Se você deseja substituir a string no arquivo no local, o sed também pode fazer isso por você adicionando uma opção "-i":

    sed -i 's/\<END\S*\s//gi' file.txt

    Aqui está uma referência útil para ajudar a formular perguntas de forma eficaz. Quanto mais preciso você for ao transmitir o que deseja, melhores serão as respostas!

    Espero que isto ajude!

    • 3
  2. Lesmana
    2023-07-27T06:53:13+08:002023-07-27T06:53:13+08:00

    neste caso, como a entrada é tão bem formada, pode ser mais fácil usarcut

    cut -d" " -f-8,10- file.txt
    

    explicação

    -d" "define o separador de campo como espaço. o padrão é guia.

    -f-8,10-pegue os campos primeiro até o oito, depois o décimo até o último. pulando o nono campo que é aquele que começa com "end".

    • 0
  3. Paul Pazderski
    2023-07-27T06:53:16+08:002023-07-27T06:53:16+08:00
    sed -E 's/ (end|END)[^ ]+//g' file.txt
    

    Corresponde e remove um espaço, seguido de end ou END, seguido de tantos não espaços quanto possível.

    • 0
  4. black-clover
    2023-07-27T09:28:04+08:002023-07-27T09:28:04+08:00

    Isso foi estranho!

    Eu tentei todas as sugestões diferentes, e nada funcionou. O arquivo apenas permaneceu inalterado.

    Em seguida, adicionei > file1.txt ao comando, para que a saída criasse uma cópia nova e editada do original e, em seguida, praticamente todos os códigos sugeridos funcionaram.

    Não tenho ideia do porquê disso.

    De qualquer forma, obrigado a todos por suas respostas rápidas e eficazes.

    • 0

relate perguntas

  • Como eu faria minha máquina Linux parecer que está executando o Windows?

  • Existe um equivalente a cd - para cp ou mv?

  • execute o contêiner do docker como root

  • Como ativar o sensor de impressão digital no domínio e no diretório ativo do Linux

  • Como alterar permanentemente Ctrl + C para Ctrl + K no CentOS 7?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve