Como extrair um retângulo de texto de um arquivo na CLI?

0

Enorme nota: NÃO ESTOU FALANDO SOBRE EDITORES DE TEXTO!

Eu preciso extrair (stdout é OK) um retângulo de texto de um arquivo de texto. Um retângulo deve ser o texto entre as linhas l1 e l2 e as colunas c1 e c2.

Eu já posso fazer isso com a cabeça, cauda e cortar em um tubo agradável e estou querendo saber se existe uma ferramenta que pode fazer isso "de uma só vez" (tm).

Alguma ideia?

    
por Uqbar 19.05.2016 / 10:08

1 resposta

3

Você poderia usar sed, é muito flexível. Por exemplo, para imprimir as linhas 2 a 5 e 4 colunas a partir da coluna 3:

sed -n '2,5 s/^.\{3\}\(.\{1,4\}\).*$//p'
  • -n significa não imprimir a linha se não houver correspondência
  • 2,5 significa apenas para linhas de 2 a 5
  • s/1/2/p significa substituir 1 por 2 e imprimi-lo
  • ^.\{3\} corresponde no início da linha (^) qualquer caractere exatamente 3 vezes
  • \( \) seleciona o que será produzido usando na parte de substituição
  • .\{1,4\} seleciona qualquer caractere até 4 ocorrências
  • .*$ corresponde a qualquer caractere até o final da linha

Todos juntos, isso fará o que você quiser.

EDIT:
A solução anterior está faltando linhas com menos de 4 caracteres.
Uma solução melhor é:

sed -n '2,5 s/^.\{0,3\}\(.\{0,4\}\).*$//p'

Este colocará uma linha vazia se a linha for menor do que os caracteres necessários, permitindo 0 colunas antes da saída e 0 colunas na saída.

    
por Camilio 19.05.2016 / 11:11