sed: imprime somente a primeira ocorrência de uma correspondência de padrão [duplicada]

1

Várias perguntas são semelhantes a esta, mas não encontrei uma solução que funcione quando quero procurar um padrão em várias linhas. O seguinte

sed -n '/First string/,/Second string/ p' my.file

imprime todas as ocorrências do padrão correspondente, mas eu gostaria apenas da primeira ocorrência. Eu estou usando o GNU sed.

    
por Yoda 05.05.2017 / 14:15

2 respostas

5

Use q para sair explicitamente quando o padrão final for atingido.

No GNU sed:

$ cat foo
foo
START
bar
END
blah
START another

$ sed -n '/START/,/END/p; /END/q' foo
START
bar
END

awk talvez torne mais fácil não repetir o padrão final:

$ awk '/START/{p=1} p; /END/{exit}' foo
START
bar
END
    
por 05.05.2017 / 14:24
1

Se for a primeira ocorrência que você deseja, talvez awk seja mais adequado para isso: awk 'NR==1,/original/{sub(/original/, "replacement")} 1' file . Extraído de aqui .

    
por 05.05.2017 / 14:28

Tags