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 / 447459
Accepted
Adam
Adam
Asked: 2018-06-03 02:16:36 +0800 CST2018-06-03 02:16:36 +0800 CST 2018-06-03 02:16:36 +0800 CST

ed endereço inválido macOS

  • 772
/Delete/,/endif/p
?
invalid address
/Delere/,/endif/p
?
no match

Isso significa que ele entende apenas latim?

/Dele/,/endif/p
?
invalid address
/Del/,/endif/p
?
invalid address

Não, o que estou fazendo de errado? Estou digitando todas as letras sem nenhum erro.

Eu tenho o macOS.

A seguir está uma amostra do arquivo que estou editando que exibe o mesmo comportamento ao editá-lo usando o edcomando acima:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Editing mappings
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Remap VIM 0 to first non-blank character
map 0 ^

" Move a line of text using ALT+[jk] or Command+[jk] on mac
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z

if has("mac") || has("macunix")
  nmap <D-j> <M-j>
  nmap <D-k> <M-k>
  vmap <D-j> <M-j>
  vmap <D-k> <M-k>
endif

" Delete trailing white space on save, useful for some filetypes ;)

if has("autocmd")
    autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
endif
ed
  • 3 3 respostas
  • 199 Views

3 respostas

  • Voted
  1. Best Answer
    Kusalananda
    2018-06-03T03:53:32+08:002018-06-03T03:53:32+08:00

    O primeiro endifocorre antes do primeiro Delete, então edfica confuso sobre o intervalo sendo especificado "para trás".

    Você vai querer primeiro encontrar a primeira ocorrência de e Delete, em seguida , aplicar o comando dessa linha para a próxima endif:

    1,/Delete/
    .,/endif/p
    

    O primeiro comando colocará o cursor na primeira linha do arquivo que contém a palavra Delete, e o segundo comando imprimirá as linhas dessa linha até a próxima linha que contém a palavra endif.


    Se você desse o mesmo comando em vi, ele reclamaria com "O segundo endereço é menor que o primeiro" e vimperguntaria "Intervalo reverso fornecido, OK para trocar (s/n)?" ao dar o comando de edição :/Delete/,/endif/p.

    sednão teria problemas, pois procura o primeiro endereço antes de começar a procurar o segundo endereço (já que é um editor de fluxo).

    • 4
  2. Benjamin W.
    2018-09-01T11:15:36+08:002018-09-01T11:15:36+08:00

    Ed tem uma noção de " endereço atual "; você pode vê-lo com .n(imprima a linha atual com seu número anexado). Quando você abre um arquivo, ele é definido na última linha do arquivo.

    Se você especificar um endereço usando uma expressão regular, obterá a próxima linha abaixo do endereço atual que corresponde, agrupando-se no final do arquivo; portanto, após abrir um arquivo, as pesquisas começam na primeira linha.

    Agora, se você especificar um intervalo de endereços com /pattern1/,/pattern2/, ed primeiro pesquisa por pattern1iniciar no endereço atual e, em seguida, por pattern2iniciar no endereço atual. O endereço atual não é alterado entre as duas pesquisas.

    Então, quando você procura por /Delete/,/endif/, o primeiro endereço corresponde à linha 20; em seguida, começamos a partir da última linha novamente e endifcombinamos na linha 18. Como o valor do primeiro endereço não pode exceder o valor do segundo, você obtém um erro.

    A solução é usar ;para separar os endereços:

    Em um intervalo delimitado por ponto-e-vírgula, o endereço atual ( .) é definido como o primeiro endereço antes de o segundo endereço ser calculado.

    Então você pode usar isso:

    /Delete/;/endif/p
    

    e você obtém as linhas 20-24:

    /Delete/;/endif/p
    " Delete trailing white space on save, useful for some filetypes ;)
    
    if has("autocmd")
        autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
    endif
    

    E para excluí-los, conforme aludido nos comentários:

    ed infile <<'EOE'
    /Delete/-;/endif/d
    wq
    EOE
    

    Isso usa o endereço /Delete/-para remover também a linha em branco antes da Deletelinha.

    • 1
  3. steve
    2018-06-03T02:40:58+08:002018-06-03T02:40:58+08:00

    Precisa /startrange/,/endrange/d. Exemplo

    $ cat inp
    foo
    Delete
    these lines
    endif
    bar
    $ ed inp
    33
    /Delete/,/endif/d
    w
    8
    q
    $ cat inp
    foo
    bar
    $
    

    Eu usaria apenas sed:

    $ sed -i '/Delete/,/endif/d' inp
    $
    
    • 0

relate perguntas

Sidebar

Stats

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

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

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 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

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 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
    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
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +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
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +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