O que a opção x para sed faz, na verdade, ao trocar dados entre o buffer hold e pattern?

1

Eu não entendo o que o x faz quando se trata de trocar o conteúdo do buffer de hold e padrão. Ele troca os dados entre a espera e o padrão para que todos os dados anteriores em espera ou padrão sejam excluídos? o que acontece exatamente?

    
por munish 27.03.2013 / 12:23

1 resposta

3

Provavelmente, a melhor maneira de explicar isso é traduzir para uma linguagem mais detalhada como perl . Em sed , o espaço de espera é como uma variável estática que é inicializada com uma linha vazia e o espaço de padrão é uma variável que sed atribui, por sua vez, a cada linha de entrada. Algo como:

$hold_space = "\n";
LINE: while ($pattern_space = <>) {

  <sed commands go here>

  print $pattern_space; # unless -n option is passed
}

x troca o padrão e mantém o espaço, e apenas faz isso.

($pattern_space, $hold_space) = ($hold_space, $pattern_space);

Agora, o espaço de espera contém o que o espaço de padrão continha (a linha de entrada atual, a menos que qualquer outro comando o tenha modificado). E o espaço de padrão é substituído por qualquer espaço contido, portanto, será gerado no final antes de processar a próxima linha de entrada (onde o espaço de padrão será atribuído à nova linha de entrada).

O espaço padrão é o que você trabalha. Então você precisa dos dados lá se quiser fazer alguma coisa com isso. O espaço de armazenamento é uma área de armazenamento que pode ser usada se você precisar manter dados entre o processamento de duas linhas de entrada.

g obtém o espaço de armazenamento no espaço de padrão, mas você perde o espaço de padrão original. x , preserva o antigo espaço de padrão no espaço de armazenamento. Por exemplo, para editar o espaço de espera, você pode fazer x;s/.../.../;x para fazer alguma substituição no espaço de espera.

    
por 27.03.2013 / 13:22

Tags