Imprimir do texto da primeira instância A à primeira instância do texto B [duplicado]

1

Eu tenho o seguinte array dentro de um programa:

  ... #code
  $packages = [ 
    'git',        # version control
     ...
    'iftop',      # monitor network usage by ip
    'iotop',      # monitor io usage
  ]
  ... #more code

Eu quero usar awk para imprimir linhas desde a primeira ocorrência de $ packages até a primeira finalização ] , após a ocorrência de $packages .

Como posso fazer isso?

    
por Philip Kirkbride 17.04.2017 / 05:07

2 respostas

1

Itere os registros, mantenha um identificador para $packages , imprima as linhas quando o identificador estiver definido e saia após a impressão quando encontrar o próximo ] :

awk '/\$packages/ {c=1; print; next} /\]/ {print; exit}; c{print}'

Exemplo:

% cat file.txt 
  ... #code
  $packages = [ 
    'git',        # version control
     ...
    'iftop',      # monitor network usage by ip
    'iotop',      # monitor io usage
  ]
  ... #more code

  ... #code
  $packages = [ 
    'git',        # version control
     ...
    'iftop',      # monitor network usage by ip
    'iotop',      # monitor io usage
  ]
  ... #more code

% awk '/\$packages/ {c=1; print; next} /\]/ {print; exit}; c{print}' file.txt   
  $packages = [ 
    'git',        # version control
     ...
    'iftop',      # monitor network usage by ip
    'iotop',      # monitor io usage
  ]
    
por 17.04.2017 / 05:14
1

Usamos o range operator , de sed para selecionar o intervalo de linhas em que estamos interessados. Para esse cenário, o intervalo começa com a string $package e termina com ] (em diferentes linhas).

Primeiramente, rejeitamos todas as linhas fora do intervalo, /\$package/,/]/!d e, em seguida, do intervalo que imprimimos todas (devido à impressão implícita da propriedade de espaço padrão de sed ) MAS quit assim que a linha com a string ] é atendida. isso implica, nós imprimimos para stdout o primeiro dos intervalos /\$package/,/]/

sed -e '/\$packages/,/]/!d; /]/q' yourfile
sed -n '/\$packages/,/]/p; /]/q' yourfile
    
por 17.04.2017 / 05:30

Tags