Quero comentar automaticamente um bloco de código no arquivo PHP, conforme abaixo:
O bloco original:
// Enable all errors
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);
O novo bloco com comentários:
/* For the production version, the following codelines are commented
out
// Enable all errors
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(E_ALL);
*/
Então pretendo colocar essas linhas em dois arquivos e usar o sed para realizar a substituição automaticamente. No entanto, depois de pesquisar on-line, encontro apenas Substitua a string pelo conteúdo de um arquivo usando sed e sed - substitua a string pelo conteúdo do arquivo , o que significa que apenas o padrão de origem ou destino está em um arquivo e o restante está on-line. Mas nenhuma amostra para ambos nos arquivos.
Então, como realizar a substituição? Devo usar sed ou awk?
Eu sugiro que você use o
patch
utilitário para essa finalidade.1. Crie o arquivo de patch usando um
diff
comandoSupondo que você tenha dois arquivos, aquele com o bloco que deseja substituir:
E o outro com o bloco que você deseja substituir:
Você cria uma diferença de contexto entre eles e coloca o conteúdo em um patchfile:
2. Aplicando o patch
Agora considere que este é o arquivo original:
Você executa o
patch
comando no arquivo que deseja alterar usando o quepatchfile
você criou antes.-c
sinalizador para "Interpretar o arquivo de patch como uma diferença de contexto (a saída do utilitário diff quando as opções-c
ou-C
são especificadas)." .patch
utilitário tentará determinar o tipo de listagem diff, a menos que seja anulado por uma opção-c
,-e
ou ."-n
-b
opção de "Salvar uma cópia do conteúdo original de cada arquivo modificado, antes que as diferenças sejam aplicadas, em um arquivo de mesmo nome com o sufixo.orig
anexado a ele."3. Validação
Agora comparando o arquivo original com o corrigido:
Não tente usar
sed
para isso, poissed
não entende strings literais (veja é-é-possível-escapar-regex-metacharacters-reliably-with-sed ), use uma ferramenta comoawk
essa que entende strings literais.Usando GNU
awk
para multi-charRS
eARGIND
:ou usando qualquer
awk
:Os itens acima foram executados usando estes arquivos de entrada: