Como uso o sed e ordeno para pegar texto entre dois marcadores e organizá-los alfabeticamente?

1

Eu gostaria de fazer o seguinte:

  1. Pegue todo o texto entre dois marcadores denotados em someFile.txt
  2. Coloque o texto em uma matriz dividida por \n
  3. Classifique a matriz em ordem alfabética
  4. Substitua o texto entre dois marcadores em someFile.txt com a versão em ordem alfabética.

someFile.txt antes da manipulação:

// __MARKER__
../library/_shared/_shared/components/InfoPill/InfoPill.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
// __MARKER__

someFile.txt após manipulação:

// __MARKER__
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/InfoPill/InfoPill.stories
// __MARKER__
    
por Nicholas Adamou 08.06.2018 / 02:10

1 resposta

0

Se perl estiver bem e o arquivo for pequeno o suficiente para os requisitos de memória

$ perl -0777 -pe 'BEGIN{$m = "// __MARKER__\n"}
                  s|$m\K.*?(?=\n$m)|join "\n", sort split/\n/,$&|gse' ip.txt 
// __MARKER__
../library/_shared/_shared/components/ButtonPrimary/ButtonPrimary.stories
../library/_shared/_shared/components/IconChevronRightBlack/IconChevronRightBlack.stories
../library/_shared/_shared/components/InfoPill/InfoPill.stories
// __MARKER__
  • -0777 para sorver todo o arquivo como uma string
  • $m = "// __MARKER__\n" salve o marcador em uma variável
  • $m\K.*?(?=\n$m) captura a string entre os marcadores
  • join "\n", sort split/\n/,$& divide a string capturada em \n , depois classifica e finalmente obtém uma única string unindo os elementos da matriz
  • s modifier para permitir que . corresponda a \n
  • e modifier para permitir o código na seção de substituição
  • use a opção -i para edição no local
por 08.06.2018 / 09:27