Come si dice "non è" un determinato carattere in sed
?sed: il mio pattern può contenere un carattere "non è"? Come si dice "non è X"?
risposta
[^x]
Si tratta di una classe di caratteri che accetta qualsiasi carattere ad eccezione x
.
Aggiungerò un avvertimento da Mastering Regular Expressions. Si noti che per questo deve coincidere che ci deve essere qualcosa lì. L'espressione regolare "su [^ x]" corrisponderà a "sum" e "sun" ma non a "su". – johnny
Come si fa a risolvere il caso che hai citato 'su'? – jcalfee314
@ jcalfee314, credo che dovrebbe funzionare per aggiungere un? ad esso piace 'su [^ x]?' nel senso che dovrebbe corrispondere a zero o uno di quei personaggi. – GradysGhost
Dalla mia esperienza personale e il post sottostante supporta questo, sed non supporta la normale negazione delle espressioni regolari con "^". Non credo che sed abbia un metodo di negazione diretta ... ma se controlli il post sottostante, vedrai alcuni rimedi. Sed regex and substring negation
Questo non è corretto. 'sed' supporta' [^ ...] 'negazione bene. Forse la tua comprensione di questo costrutto è incompleta, però? La domanda collegata è comunque utile. – tripleee
Per coloro non soddisfatto della risposta selezionata secondo johnny's comment.
'su [^ x]' corrisponde a 'somma' e 'sole' ma non a 'su'.
Si può dire sed per not
partita linee con x
utilizzando la seguente sintassi:
sed '/x/! s/su//' file
Questo vorrebbe anche saltare 'x su' anche se dovrebbe corrispondere. Si potrebbe fare '/ sux /! S/su //' ma questo salterà comunque 'su sux'where forse il primo, ma non il secondo,' su' dovrebbe corrispondere. Idealmente, l'OP dovrebbe chiarire i requisiti. – tripleee
Ci sono due possibili interpretazioni della sua domanda. Come altri hanno già sottolineato, [^x]
corrisponde a un singolo carattere che non è x
. Ma anche una stringa vuota non è x
, quindi forse stai cercando [^x]\|^$
.
Nessuna di queste risposte si estende a sequenze multi-carattere, che di solito è ciò che le persone stanno cercando. Si potrebbe faticosamente costruire qualcosa come
[^s]\|s\($\|[^t]\|t\($\|[^r]\)\)\)
a comporre un'espressione regolare che non corrisponde str
, ma una soluzione molto più semplice in sed
è quello di eliminare tutte le linee che fa partita str
, poi tenere il resto;
sed '/str/d' file
Perl 5 ha introdotto un motore di espressioni regolari molto più ricca, che è quindi normale in Java, PHP, Python, ecc, perché Perl supporta utilmente un sottoinsieme di sed
sintassi, probabilmente si potrebbe convertire un semplice sed
script per Perl per ottenere utilizzare una funzione utile da questo dialetto regex prolungate, quali quelle negative:
perl -pe 's/(?:(?!str).)+/not/' file
sostituirà una stringa che non è str
con not
. Lo (?:...)
è un gruppo non catturante (a differenza di molti dialetti sed
, una parentesi senza escape è un metacarattere in Perl) e (?!str)
è un'asserzione negativa; il testo immediatamente dopo questa posizione nella stringa non deve essere str
in modo che la regex corrisponda. Il +
ripete questo modello fino a quando non riesce a corrispondere. Nota come l'asserzione deve essere vera in ogni posizione della partita, quindi abbiniamo un personaggio alla volta con .
(i neofiti spesso sbagliano e affermano solo erroneamente ad es. L'inizio di un modello più lungo, che potrebbe tuttavia corrispondere a str
da qualche parte all'interno, portando ad una "perdita").
- 1. Sed per cercare 2 pattern, se il primo pattern non esiste, stampare il secondo pattern
- 2. Il debugger lldb dice che il mio oggetto è nullo quando non lo è?
- 3. Apache non si avvia - dice che il modulo httpd è caricato ma non è in esecuzione
- 4. Può contenere === quando == non lo fa?
- 5. Perché JSON.Parse dice "carattere non valido"?
- 6. Perché JavaScript dice che un numero non è un numero?
- 7. Perché il comando sed contenere simboli
- 8. Come si dice `\ x -> y`?
- 9. Come mai il mio callback dice "indefinito non è una funzione
- 10. Perché questo pattern di corrispondenza non è raggiungibile quando si utilizzano pattern non letterali?
- 11. LaunchScreen.xib non visualizza il mio carattere personalizzato
- 12. non può contenere sterlina britannica in WCF?
- 13. Perché il mio hash non è undef?
- 14. Info.plist non può contenere i UIRequiredDeviceCapabilities chiave
- 15. Il blocco sed è?
- 16. Xcode 4 nel mio Mac App Store dice che è installato, ma non è
- 17. Perché il mio MKPointAnnotation non è personalizzato?
- 18. IntelliJ dice, probabilmente non dovrebbe essere passato come parametro x
- 19. Perché il validatore w3 dice che onClick non è valido?
- 20. Perché il mio oggetto .Net non è serializzabile?
- 21. Un ListView può contenere frammenti
- 22. Il carattere del mio ModelSim è troppo piccolo per vedere
- 23. Perché il mio UISlider non è animato?
- 24. Cosa può awk fare che sed non può?
- 25. Espressione di pattern non greedy
- 26. Che cos'è l'errore "L'elemento non può contenere spazi bianchi Il modello di contenuto è vuoto." significare?
- 27. Number.isInteger (x) che è creato non può funzionare in IE
- 28. TortoiseSVN non può eseguire il commit, dice "vietato dal server"
- 29. Un indirizzo email può contenere caratteri internazionali (non inglesi)?
- 30. Perché '\ x' non è valido in Python?
'[^ X]' è un qualsiasi carattere ma 'X'. PS anche se sappiamo cosa intendi, il SED non dovrebbe essere in maiuscolo. –
@Sanjay Okay, non decodificherò sed.Puoi pubblicare una risposta nella sezione di risposta la prossima volta, non i commenti? – KRB