In questa modifica
Stéphane Chazelas POSIXifica (di nuovo) la mia sedformattazione inserendo una -epausa xpression e un'altra -edichiarazione xpression. Ora, potrei solo chiedergli perché nei commenti, suppongo, ma è già la revisione numero 18 su quella risposta e quasi tutti i precedenti erano già grazie a omaggi simili (se riesci a vedere i commenti cancellati saprai cosa Intendo) . Inoltre, penso di essere abbastanza vicino per capire perché esprimerlo in un modo che potrebbe essere più generalmente utile. Quindi spero ...
In genere preferisco mantenere le mie sed -expressioni totali su una se potessi, ma ho anche una maggiore preferenza per conformarmi alle specifiche il più vicino possibile, specialmente quando la differenza non è maggiore di a <space>e an -e. Ma non posso farlo se non capisco perché dovrei. Ecco un breve riassunto dello stato attuale della mia comprensione:
l'
' -e 'interruzione può portare in modo portabile a un'interruzione di ewline dellosedscript in\nun'istruzione dellasedriga di comando ... Sono certo sfocata sul perchéla parentesi graffa di chiusura in una
sed{funzione}deve essere preceduta da un'interruzione di\newline come indicato qui:- Il
<right-brace>è preceduta da una<newline>e può essere preceduta o seguita da<blank>caratteri.
- Il
una
\npausa ewline è altrettanto necessario in seguito a qualsiasi uso di ...a,b,c,i,r,t,w, o:.
Ma non capisco chiaramente in che modo la definizione della {funzione si }riferisce !all'operatore non. L'unica menzione che trovo dell'operatore di negazione negli stati delle specifiche:
- Una funzione può essere preceduta da uno o più
!caratteri, nel qual caso la funzione deve essere applicata se gli indirizzi non selezionano lo spazio del modello.
Questo significa che l'uso di un !implica {parentesi graffe }? Che $!dire dei comandi - dovrebbero anche essere separati da ' -e 'interruzioni? È stato questo ciò che è stato affrontato quando Stéphane ha recentemente posto la mia risposta?
Penso che sia l' !operatore di negazione, o è la bdichiarazione del ranch che affronta nella sua modifica - o forse è entrambi contemporaneamente - ma non lo so e mi piacerebbe. Se è solo la bdichiarazione del ranch, allora credo che un dfarebbe al suo posto ed eliminerebbe la necessità dell'interruzione ' -e ', ma preferirei essere certo prima di mettere in pericolo una risposta POSIXified tre volte . Puoi aiutare?
Dopo tutto , l' ho rischiato , ma non con grande certezza ...
:parte - hai guidato quella casa mesi fa. Ma non capisco perfettamente perché il secondo sedcomando sia stato similmente POSIXificato .
sedsono molto chiare per me. Ho chiesto chiarimenti alcune volte in passato, ma non credo che sia stato aggiornato di conseguenza. Un buon test è quello di provare con il toolchest cimelio (Solaris, derivato dall'originale e su cui si basa ampiamente la specifica POSIX).
s///istituzioni dovrebbero accettare il concatenamento con a ; . diventa sfocato attorno ai comandi che devono essere delimitati con una nuova riga e come -epuò resistere in quel caso - almeno lo fa per me. Vivo ancora per inciampare su un sedche non li interpreta in modo abbastanza intercambiabile però.
;prima di una nuova riga - una nuova riga va bene. Onestamente, si potrebbe fare a meno del -ee tutto interamente e solo scrivere un file come #!/bin/sedcon ogni comando su una nuova riga - o quelli che non richiedono tali delimitatori invece delimitati con ;. Quelli che fare richiedono nuove righe sono di solito quelli che prendono ingresso arbitrari - :nomi delle etichette e comandi che si riferiscono a loro come bo to chiusura }graffe per funzioni o read e writo che prendono args nomi di file. Devono essere seguiti tutti in modo portabile \n.
b;n;:b, stai ramificando l'etichetta chiamata";n;:b"in seds storiche e POSIX (e GNU sed non è a questo proposito).