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 / unix / Perguntas / 492656
Accepted
mahmood
mahmood
Asked: 2019-01-06 05:28:51 +0800 CST2019-01-06 05:28:51 +0800 CST 2019-01-06 05:28:51 +0800 CST

Obtendo a última frase de um programa em execução de stdout/stderr

  • 772

Quando executo um qemucomando, vejo uma mensagem na linha inferior que está me fornecendo um comando IP:PORT for vncviewer.

[mahmood@com[mahmood@compute-0-0 ~] qemu-system-x86_64 -m 4096 -hda win7_x64_snap.img -boot c -usbdevice tablet -enable-kvm -device e1000,netdev=host_files -netdev user,net=10.0.2.0/24,id=host_files,restrict=off
qemu-sqemu-system-x86_64: warning: host doesn't support requested feature:    CPUID.80000001H:ECX.tbm [bit 21]
VNC server running on 127.0.0.1:5900

Como posso obter a última linha impressa na tela?, então extraio a última parte que é 127.0.0.1:5900.

bash
  • 4 4 respostas
  • 390 Views

4 respostas

  • Voted
  1. Best Answer
    mahmood
    2019-01-06T09:29:54+08:002019-01-06T09:29:54+08:00

    Como o qemu é um programa de longa duração e não retorna ao prompt, é mais fácil abrir outro terminal e verificar qual IP:PORT o qemu está usando. Então, o comando é

    $ netstat -tulpn | grep qemu-system | awk '{print $4}'
    127.0.0.1:5900
    

    Obrigado pelas sugestões.

    • 1
  2. ctrl-alt-delor
    2019-01-06T05:36:16+08:002019-01-06T05:36:16+08:00

    Eu usaria taile sed, ou apenassed

    por exemplo

    address=$(the_above_command | sed -r -e 's/VNC server running on ([0-9.:]+)$/\1/')
    echo "$address" #or some other command
    

    Teste o bit no ()para ver se ele dá o que você quer. O $(cmd)é uma substituição, ele pega o stdout de cmde se substitui por essa saída. A linha é então analisada novamente.

    Nota: se o programa está rodando/continuando rodando, então você não pode saber se a linha atual é a última linha. Felizmente, acho que você não precisa saber, que é a última linha.

    • 0
  3. steeling
    2019-01-06T05:39:06+08:002019-01-06T05:39:06+08:00

    Uma combinação de grepe cutseria útil aqui.

    Você pode extrair a última linha com

    grep -m1 'VNC server running on'
    

    O -m1sinalizador significará que o grep irá parar de ler após a primeira partida, já que este é presumivelmente um processo de longa duração.

    Você poderia então cortar o endereço com

    cut -d' ' -f5
    

    Se você deseja canalizar a saída para outro processo, provavelmente desejará iniciar qemuem segundo plano assim:

    (qemu-system-x86_64... &) | grep -m1 'VNC server running on' | cut -d' ' -f5
    
    • 0
  4. ozzy
    2019-01-06T06:24:58+08:002019-01-06T06:24:58+08:00

    Isso deve funcionar:

    grep -m1 -oP '(\d{1,3}\.?){4}:\d{1,5}' <( your-qemu-command 2>&1 )
    
    • <( your-qemu-command 2>&1 )é uma substituição de processo que inicia qemucom stdout/stderr redirecionado para um pipe anônimo ou FIFO;
    • greplê do pipe/FIFO, procurando aproximadamente o padrão IP:PORT, com IP referindo-se a um endereço IPv4. A -oopção para grepgarante que imprimirá apenas a combinação IP:PORT de uma linha correspondente; a -m1opção garante que grepretornará ao prompt assim que encontrar o que estava procurando (ou seja, sair na primeira correspondência). A -Popção indica o uso da sintaxe de expressão regular Perl.
    • note que qemupermanece em execução em segundo plano até terminar. Qualquer saída em stdout/stderr by qemuapós o término do grepcomando é perdida, mas como a combinação IP:PORT deve ser a última saída, isso não deve ser motivo de preocupação.

    Se você deseja capturar a saída do comando acima, basta envolvê-lo em uma substituição de comando $(...)assim:

    ip_port=$( grep ...etc )
    
    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

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