Si usted está buscando una respuesta al ejemplo específico dado en la pregunta, o por qué se utiliza el ?
incorrectamente (independientemente de la sintaxis), ver the answer by Laurence Gonsalves.
Si está buscando lugar para la respuesta a la pregunta general de por qué ?
no exhibe su significado especial en la SED como era de esperar:
Por defecto, sed utiliza la sintaxis de las expresiones "POSIX básica regular ", por lo que el signo de interrogación se debe escapar como \?
para aplicar su significado especial; de lo contrario, coincide con un signo de interrogación literal. Como alternativa, puede usar la opción -r
o --regexp-extended
para usar la "sintaxis de expresión regular extendida", que invierte el significado de caracteres especiales escapados y no escabrosos, incluido ?
.
En palabras de la documentación sed de GNU (vista mediante la ejecución de 'información sed' en Linux):
La única diferencia entre las expresiones regulares básicas y extendidas está en el comportamiento de unos pocos caracteres: ' ? ',' + ', paréntesis y llaves (' {} '). Mientras que las expresiones regulares básicas requieren que se escapen si desea que se comporten como caracteres especiales, al usar expresiones regulares extendidas, debe escapar de ellas si quiere que coincida con un carácter literal.
y la opción se explica:
-r
--regexp-extended
uso extendido de expresiones regulares en lugar de regulares básicas expresiones. Las expresiones regulares extendidas son aquellas que 'egrep' acepta; pueden ser más claros porque generalmente tienen menos barras invertidas, pero son una extensión de GNU y, por lo tanto, los scripts que los usan no son portátiles.
actualización
las nuevas versiones de GNU SED ahora dicen esto:
-E
-r
--regexp-extended
uso extendido de expresiones regulares en lugar de regulares básicas expresiones. Las expresiones regulares extendidas son aquellas que 'egrep' acepta; ellos pueden ser más claros porque generalmente tienen menos barras invertidas. Históricamente esta era una extensión de GNU, pero la extensión '-E' tiene desde que se agregó al estándar POSIX (http://austingroupbugs.net/view.php?id=528), por lo tanto, utilice '-E' para la portabilidad . GNU sed aceptó '-E' como opción no documentada durante años, y * BSD seds también han aceptado '-E' durante años, pero las secuencias de comandos que usan '-E' podrían no transferirse a otros sistemas anteriores.
Por lo tanto, si necesita conservar la compatibilidad con sed antiguo de GNU, quédese con -r
. Pero si prefiere una mejor portabilidad multiplataforma en sistemas más modernos (por ejemplo, soporte Linux + Mac), vaya con -E
(pero tenga en cuenta que todavía hay algunos caprichos y diferencias entre GNU sed y BSD sed, por lo que deberá asegurarse sus guiones son portátiles en cualquier caso).
Great answer. De hecho, no lo usé porque mi caso particular tenía un atajo. Sin embargo, gracias por mencionar la codicia de mi '. *' ..que en realidad arregló todo. – User1
FWIW, en OS X (y posiblemente otros BSD), la bandera es ''E'. '-r' es inexistente. –