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 / 1771144
Accepted
seagull
seagull
Asked: 2023-02-28 18:53:57 +0800 CST2023-02-28 18:53:57 +0800 CST 2023-02-28 18:53:57 +0800 CST

PowerShell: em um arquivo de texto, torne esta linha parte da linha anterior

  • 772

As circunstâncias que levaram a essa solicitação não são muito importantes (leia-se: por favor, não me dê dicas sobre como evitar essa situação, já tentei), mas tenho um mecanismo que produz arquivos de texto. Por exemplo, esses arquivos normalmente se parecem com isso:

ENTRY: XYZ
COMMENT: This is a comment
ENTRY: 123
INTEGER: 4

Às vezes, no entanto, os dados que processamos contêm quebras de linha, então os arquivos de texto ficam assim:

ENTRY: XYZ
COMMENT: This is a comment
that spans over multiple lines
just to make life difficult
ENTRY: 123

O que estou procurando é algum PowerShell que possa processar um arquivo de texto inteiro e dizer: "para linhas que não contêm um :caractere, faça esta linha parte da linha antes dela, possivelmente substituindo a quebra por ::ou algo para deixar claro". O resultado final procurado seria:

ENTRY: XYZ
COMMENT: This is a comment :: that spans over multiple lines :: just to make life difficult
ENTRY: 123

Até agora tenho usado get-content | % {$_ etc}, mas % divide as coisas em linhas individuais. Eu não acredito %ou ?tenho qualquer noção de contexto, então não será possível dizer where object match xyz make it part of the last object.

Passei muito tempo tentando usar números de linha. Meu pseudocódigo era while the document contains lines that do not contain a colon, get the line number of the first line not containing a colon and set the previous line number to contain both its data and the data of the offending line; no entanto, a ação anterior alteraria o número de linhas, o que significa que toda vez que eu fizesse esse ajuste, precisaria recalcular os números das linhas individuais. Acrescente a isso que "enquanto o documento contém linhas que não começam com dois pontos" pode ser um processo muito intensivo do sistema (esses documentos podem ser muito grandes) e é uma receita para o desastre.

powershell
  • 1 1 respostas
  • 25 Views

1 respostas

  • Voted
  1. Best Answer
    Destroy666
    2023-02-28T19:49:10+08:002023-02-28T19:49:10+08:00

    Aqui está um exemplo de uma solução baseada em regex:

    (Get-Content -Raw test.txt) -Replace '\n([^\n:]+)(?=\n)', ' :: $1' | Out-File test.txt
    

    Primeiro você carrega o arquivo inteiro com -Rawflag. Em seguida, o regex corresponde a uma nova linha ( \n), caracteres que não são nova linha ou :capturados em um grupo ([^\n:]+)e, por último, temos uma previsão positiva de uma nova linha (?=\n)que garante uma parada nela, mas a ignora para a correspondência completa, para que a próxima \nseja correspondida para a próxima linha. Em seguida, temos uma substituição adequada usando o grupo capturado e a enviamos para o mesmo arquivo.

    • 1

relate perguntas

  • Como colocar string variável em array no powershell?

  • Powershell e regex: lista de arquivos "backup ao salvar" do Notepad ++. Editar nome, classificar por lastwritetime

  • Adicionando cor de primeiro plano ao perfil do Powershell?

  • Não é possível ativar o Microsoft Print to PDF depois de desativado

  • Posso fazer com que este script do PowerShell aceite vírgulas?

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