Na presente edição
Stéphane Chazelas POSIXifies (novamente) o meu sedformatação através da inserção de uma -epausa xpression e outra -edeclaração xpression. Agora, posso perguntar a ele por que, nos comentários, suponho, mas já é a revisão número 18 dessa resposta e quase todas as anteriores já eram graças a brindes semelhantes (se você puder ver comentários excluídos, saberá o que Quero dizer) . Além disso, acho que estou perto o suficiente para entender por que expressar isso de uma maneira que possa ser mais útil em geral. Então aqui está esperando ...
Geralmente, prefiro manter minhas sed -eimpressões totais em um, se eu puder, mas também tenho uma preferência maior por estar em conformidade com as especificações o mais próximo possível, especialmente quando a diferença chega a não mais que um <space>e um -e. Mas não posso fazer isso se não entendo por que deveria. Aqui está um breve resumo do estado atual do meu entendimento:
a
' -e 'interrupção pode substituir portabilidade uma quebra de linha desedscript\nem umasedinstrução de linha de comando ... Eu sou confuso sobre o porquêa chave de fechamento em uma
sed{função}deve ser precedida por uma\nquebra de linha de linha, conforme indicado aqui:- O
<right-brace>deve ser precedido por a<newline>e pode ser precedido ou seguido por<blank>caracteres.
- O
uma
\npausa ewline é igualmente necessário seguir qualquer uso de ...a,b,c,i,r,t,w, ou:.
Mas não entendo claramente como a definição de {função }se relaciona com o !operador not. A única menção que encontro do operador de negação nos estados de especificação:
- Uma função pode ser precedida por um ou mais
!caracteres; nesse caso, a função será aplicada se os endereços não selecionarem o espaço do padrão.
Isso significa que o uso de um !implica {aparelho }? O que dizer dos $!comandos - eles também devem ser separados por ' -e 'intervalos? Foi isso que foi abordado quando Stéphane mais recentemente POSIXificou minha resposta?
Eu acho que é o !operador de negação ou a bdeclaração do rancho que ele aborda em sua edição - ou possivelmente é ao mesmo tempo -, mas eu não sei e gostaria de fazê-lo. Se for apenas a bdeclaração do rancho, acredito que um dfuncionaria em seu lugar e eliminaria a necessidade do ' -e 'intervalo, mas prefiro ter certeza antes de arriscar uma resposta três vezes POSIXificada . Você pode ajudar?
Afinal , arrisquei , mas não com muita certeza ...
:papel - você dirigiu isso para casa meses atrás. Mas não entendo completamente por que o segundo sedcomando foi similarmente POSIXificado .
sedé muito incerta para mim. Solicitei esclarecimentos algumas vezes no passado, mas acho que não foi atualizado como resultado. Um bom teste é tentar usar o baú da ferramenta de herança (Solaris one, derivado do original e no qual a especificação POSIX se baseia amplamente).
s///as ubstitutions devem aceitar encadeamento com a ; . fica embaçado com os comandos que devem ser delimitados com uma nova linha e como -epode ficar nesse caso - pelo menos para mim. Ainda estou tropeçando em algo sedque não os interpreta de maneira bastante intercambiável.
;antes de uma nova linha - uma nova linha é boa. Honestamente, você poderia ficar sem o -ee tudo inteiramente e apenas escrever um arquivo como #!/bin/sedcom cada comando em uma nova linha - ou aqueles que não requerem esses delimitadores, em vez disso, delimitados por ;. Os que fazer exigem novas linhas são geralmente os que levam entrada arbitrária - :nomes de rótulos e comandos que se referem a eles como bou tou fechar }curlies para funções ou read e writo que levam argumentos de nome de arquivo. Todos eles portàvelmente precisam ser seguidos por \n.
b;n;:b, você está ramificando para o rótulo chamado";n;:b"seds históricos e POSIX (e o GNU sed não é nesse sentido).