¿Cómo puedo decir «no» cierto personaje en sed?

  • [^X] es cualquier char, pero X. PS a pesar de que sabemos lo que quieres decir, SED no debe ser en mayúscula
  • Bueno voy a onu-capitalizar la sed. Puedes publicar una respuesta en la sección de respuestas la próxima vez, no los comentarios?
InformationsquelleAutor KRB | 2011-09-22

4 Comentarios

  1. 47
    [^x]

    Esta es una clase de caracteres que acepta cualquier carácter excepto x.

    • Voy a añadir una advertencia a partir del dominio de las Expresiones Regulares. Tenga en cuenta que para que este partido debe haber algo allí. El regex ‘su[^x]’ coinciden ‘suma’ y ‘sol’, pero no ‘su’.
    • ¿Cómo fijar coincida con el caso que usted menciona ‘su’ ?
    • Creo que se debe trabajar para agregar una ? a ella como » su[^x]?’, es decir, debe coincidir con el cero o a uno de esos personajes.
    • No; al final de la repetición es casi nunca lo que desea; esto significa que coincida con o sin esta última restricción.
    • Así se escribe esta fuera, su[^x]\? coincidirá con «sux» porque la subcadena «su» cumple la expresión regular. Se excluyen de la x a partir de la coincidencia, no impedir algo con una x allá de la coincidencia. (Esto podría funcionar si hay algo después de la condición, como su[^x]\?$)
  2. 8

    Para aquellos no está satisfecho con la respuesta seleccionada como por johnny comentario.

    ‘su[^x]’ coinciden ‘suma’ y ‘sol’, pero no ‘su’.

    Usted puede decirle a sed que not coincidir con las líneas de x utilizando la sintaxis siguiente:

    sed '/x/! s/su//' file

    Ver kkeller la respuesta de otro ejemplo.

    • Este sería falsa saltar x su aunque se supone que debe de coincidir. Usted podría hacer /sux/!s/su//, pero que va a saltar su suxdonde tal vez la primera, pero no la segunda, su debe coincidir. Idealmente, el OP debe aclarar los requisitos.
  3. 5

    Hay dos posibles interpretaciones de su pregunta. Como otros ya han señalado, [^x] coincide con un único carácter que no es x. Pero una cadena vacía también no x, así que tal vez usted está buscando para [^x]\|^$.

    Ninguna de estas respuestas se extienden a múltiples secuencias de caracteres, que es generalmente lo que la gente está buscando. Usted podría minuciosamente construir algo como

    [^s]\|s\($\|[^t]\|t\($\|[^r]\)\)\)

    para componer una expresión regular que no coincide con str, pero de una forma mucho más sencilla en sed es eliminar cualquier línea que hace partido str, a continuación, guarde el resto;

    sed '/str/d' file

    Perl 5 introdujo una mucho más rica regex motor, que es, por lo tanto estándar en Java, PHP, Python, etc. Porque Perl amablemente admite un subconjunto de sed sintaxis, que probablemente se podría convertir un simple sed script de Perl para llegar a utilizar una útil característica de esta ampliación de la regex dialecto, tales como negativo afirmaciones:

    perl -pe 's/(?:(?!str).)+/not/' file

    va a reemplazar una cadena que no es str con not. El (?:...) es un no-grupo de captura (a diferencia de en muchos sed dialectos, un sin escape paréntesis es un metacarácter en Perl) y (?!str) es un negativo de la afirmación; el texto inmediatamente después de esta posición en la cadena no debe ser str para que el regex para que coincida. El + repite este patrón hasta que no coinciden. Observe cómo la afirmación necesita ser cierto en cada posición en el partido, así que hemos partido de un carácter a la vez con . (novatos a menudo obtener esta mal, y erróneamente, sólo afirman por ejemplo, el comienzo de un largo patrón, que podría, sin embargo, coinciden str en algún lugar dentro de, conduce a una «fuga»).

  4. 1

    Desde mi propia experiencia, y el siguiente post admite esto, sed no admite normal regex negación de usar «^». No creo que sed tiene una negación directa método…pero si revisa el siguiente post, verás algunas soluciones.
    Sed regex y subcadena negación

    • Tipo de.. funciona esto: echo ‘<a href=»egww»>bla</a><a href=»bloge.weg»>sí</a>’ | sed ‘[email protected]=»[^http]@href=»/@g’
    • Resultados: <a href=»/gww»>bla</a><a href=»bloge.weg»>sí</a> (sólo comparable a la dirección url relativa)
    • Esto es incorrecto. sed apoya [^...] negación bien. Tal vez su comprensión de esta construcción es incompleta, aunque? Los enlaces pregunta es útil, sin embargo.
    • Pero aviso que [^http] busca un único carácter que no es (newline o) h,t, o p. (El segundo t es totalmente redundante, pero tolerada por el regex motor.)

Dejar respuesta

Please enter your comment!
Please enter your name here