¿Cómo puedo decir "no es" cierto personaje en sed
?sed: ¿Puede mi patrón contener un carácter "no es"? ¿Cómo digo "no es X"?
Respuesta
[^x]
Esta es una clase de caracteres que acepta cualquier carácter excepto x
.
Añadiré una advertencia de Mastering Regular Expressions. Tenga en cuenta que para que esto coincida debe haber algo allí. La expresión regular 'su [^ x]' coincidirá con 'suma' y 'sol', pero no 'su'. – johnny
¿Cómo lo arreglas para que coincida con el caso en que mencionaste 'su'? – jcalfee314
@ jcalfee314, creo que debería funcionar para agregar un? a ella como 'su [^ x]?' lo que significa que debe coincidir con cero o uno de esos personajes. – GradysGhost
Según mi propia experiencia, y la publicación a continuación lo admite, sed no admite la negación de expresiones regulares normales con "^". No creo que sed tenga un método de negación directa ... pero si revisas la publicación a continuación, verás algunas soluciones. Sed regex and substring negation
Esto es incorrecto. 'sed' admite la negación' [^ ...] 'muy bien. Sin embargo, tal vez su comprensión de esta construcción sea incompleta. La pregunta vinculada es útil, sin embargo. – tripleee
Para aquellos no está satisfecho con la respuesta seleccionada según johnny's comment.
'su [^ x]' coincidirá con 'suma' y 'sol' pero no 'su'.
Se puede saber SED a not
líneas de solape con x
usando la siguiente sintaxis:
sed '/x/! s/su//' file
Esto alía skip 'x su' a pesar de que se supone que debe coincidir. Podrías hacer '/ sux /! S/su //' pero eso aún saltaría 'su sux' donde tal vez el primero, pero no el segundo,' su' debería coincidir. Idealmente, el OP debería aclarar los requisitos. – tripleee
Hay dos posibles interpretaciones de su pregunta. Al igual que otros ya han señalado, [^x]
coincide con un solo carácter que no es x
. Pero una cadena vacía tampoco es x
, por lo que quizás esté buscando [^x]\|^$
.
Ninguna de estas respuestas se extiende a secuencias de caracteres múltiples, que es lo que la gente está buscando. Se podría construir laboriosamente algo así como
[^s]\|s\($\|[^t]\|t\($\|[^r]\)\)\)
para componer una expresión regular que no coincide con str
, pero una solución mucho más sencilla en sed
es borrar cualquier línea que hace partido str
, a continuación, mantener el resto;
sed '/str/d' file
Perl 5 introdujo un motor de expresiones regulares mucho más rica, que es por lo tanto estándar en Java, PHP, Python, Perl, etc. Debido a que amablemente admite un subconjunto de la sintaxis sed
, que probablemente se podría convertir un simple script en Perl para sed
a llegar a utilizar una característica útil de este dialecto expresión regular extendida, como afirmaciones negativas:
perl -pe 's/(?:(?!str).)+/not/' file
va a reemplazar una cadena que no es str
con not
. El (?:...)
es un grupo que no captura (a diferencia de muchos dialectos sed
, un paréntesis no guardado es un metacarácter en Perl) y (?!str)
es una afirmación negativa; el texto inmediatamente después de esta posición en la cadena no debe ser str
para que la expresión regular coincida. El +
repite este patrón hasta que no coincide. Observe cómo la afirmación debe ser cierta en cada posición del partido, por lo que emparejamos un personaje a la vez con .
(los novatos suelen equivocarse, y erróneamente solo afirman, por ejemplo, al comienzo de un patrón más largo, que podría coincidir con str
en algún lugar dentro, lo que lleva a una "fuga").
- 1. Groovy Date Parsing - X es un carácter de patrón ilegal
- 2. hexadecimal 0x19 es un carácter no válido
- 3. Cuando es `X no es null` no el mismo que` NO (X es NULL) `
- 4. ¿Cómo le digo a Entity Framework Function Import que una columna devuelta por un procedimiento almacenado no puede contener nulos?
- 5. Mi clase no es un error servlet
- 6. La interfaz C# no puede contener operadores
- 7. ¿Qué es un patrón anidado en Haskell?
- 8. ¿Por qué no es un patrón de ancho fijo?
- 9. ASP.NET limitaciones 4 URL: ¿por qué URL no puede contener ningún carácter% 3f
- 10. sed en OS X - parece que no puede utilizar en expresiones regulares +
- 11. Cómo puede DBNull no es igual DBNull
- 12. ¿Por qué mi clase no es aceptable?
- 13. ¿Puede un ListView contener fragmentos
- 14. ¿Qué puede hacer eso que sed no puede hacer?
- 15. obras comando sed en Linux, pero no en OS X
- 16. ¿Cómo le digo a TortoiseHg que un archivo no es binario?
- 17. sed rara-delimitador (que no sean & |?/...)
- 18. cómo determinar si un carácter es un carácter chino
- 19. ¿Cómo eliminar el último carácter usando sed?
- 20. Error 'X no es una plantilla'
- 21. C# El parámetro del método especificado no puede contener nulos
- 22. ¿Por qué mi hash no es undef?
- 23. Expresión de patrón no codicioso
- 24. ¿Por qué no es `Encoding.UTF8.GetBytes (Encoding.UTF8.GetString (x)) == x`
- 25. contraseña no puede contener libra británica en WCF?
- 26. interfaces no pueden contener campos
- 27. ¿Por qué '\ x' no es válido en Python?
- 28. Skip/eliminar caracteres no ASCII con sed
- 29. C# Método ¿El atributo no puede contener una expresión Lambda?
- 30. ¿Cómo le digo a ActiveRecord que no registre ningún carácter de control
'[^ X]' es cualquier char pero 'X'. PD, aunque sabemos lo que quieres decir, SED no debe estar en mayúscula –
@Sanjay Okay Descapitalizaré sed.¿Puedes publicar una respuesta en la sección de respuestas la próxima vez, no los comentarios? – KRB