In questa modifica
Stéphane Chazelas POSIXifica (di nuovo) la mia sed
formattazione inserendo una -e
pausa xpression e un'altra -e
dichiarazione 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
-e
xpressioni 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 dellosed
script in\n
un'istruzione dellased
riga di comando ... Sono certo sfocata sul perchéla parentesi graffa di chiusura in una
sed
{
funzione}
deve essere preceduta da un'interruzione di\n
ewline come indicato qui:- Il
<right-brace>
è preceduta da una<newline>
e può essere preceduta o seguita da<blank>
caratteri.
- Il
una
\n
pausa 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 b
dichiarazione del ranch che affronta nella sua modifica - o forse è entrambi contemporaneamente - ma non lo so e mi piacerebbe. Se è solo la b
dichiarazione del ranch, allora credo che un d
farebbe 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 sed
comando sia stato similmente POSIXificato .
sed
sono 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 -e
può resistere in quel caso - almeno lo fa per me. Vivo ancora per inciampare su un sed
che 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 -e
e tutto interamente e solo scrivere un file come #!/bin/sed
con 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 b
o t
o chiusura }
graffe per funzioni o r
ead e w
rito 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).