Pergunta

Eu tenho um monte de arquivos Java a partir do qual eu quero remover as linhas javadoc com a licença [estou mudando isso no meu código].

O padrão que eu estou procurando é

^\* \* ProjectName .* USA\.$

mas combinados através das linhas

Existe uma maneira sed [ou um editor de uso geral em Windows / Linux] pode fazer uma pesquisa / substituir para um padrão de múltiplas linhas?

Foi útil?

Solução

Aqui está o ponto de referência apropriado no meu tutorial sed favorito.

Outras dicas

Sim. Você está usando sed, awk, perl, ou qualquer outra coisa para resolver este problema?

ferramentas de expressão mais regulares permitem especificar padrões de multi-linha. Basta ter cuidado com expressões regulares que são demasiado ganancioso, ou eles vão coincidir com o código entre os comentários, se existir.

Aqui está um exemplo:

/\*(?:.|[\r\n])*?\*/
perl -0777ne 'print m!/\*(?:.|[\r\n])*?\*/!g;' <file>

Imprime todos os comentários correr juntos. O (?: Notação deve ser usados ??para parêntesis não-captura. / não tem que ser escapado porque! delimita a expressão. -0777 é usada para activar o modo de sorver e -n permite leitura automática.

(De: http://ostermiller.org/findcomment.html )

Provavelmente alguém está ainda à procura de tal solução ao longo do tempo. Aqui está um.

Use awk para encontrar as linhas a ser removido. Em seguida, use diff para remover as linhas e deixe sed limpeza.

awk "/^\* \* ProjectName /,/ USA\.$/" input.txt \
  | diff - input.txt \
  | sed -n -e"s/^> //p" \
  >output.txt

Uma nota de advertência: se a primeira exist padrão, enquanto o segundo não, você vai perder todo o texto abaixo do primeiro padrão - de modo a verificar que a primeira

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top