Recopilando los pensamientos de la sección de comentarios, parece que esto se reduce a cómo las diferentes implementaciones grep
han decidido lidiar con coincidencias vacías, y las coincidencias de expresiones [a-z]*
en la cadena vacía.
La opción -o
no está definida por POSIX, por lo que la forma en que una implementación la trata se deja a los desarrolladores.
GNU grep
obviamente descarta las coincidencias vacías, por ejemplo, la coincidencia de la cadena vacía después de once
cuando se usa [a-z]*
, y continúa procesando la entrada desde el siguiente carácter en adelante.
BSD grep
, parece estar golpeando el fósforo vacío y decide que, por alguna razón, eso es suficiente, y se detiene allí.
Stéphane menciona que la versión ast-open
de grep
en realidad entra en un bucle infinito en la coincidencia vacía de [a-z]*
después de once
y no pasa de ese punto en la cadena.
OpenBSD grep
parece ser diferente de macOS y FreeBSD grep
en que agregar el indicador -w
(que requiere que las coincidencias estén delimitadas por límites de palabras )hace que [a-z]*
devuelva cada palabra por separado.
ilkkachu hace la observación de que -o
con un patrón que permite hacer coincidir una cadena vacía en algún sentido es confuso (o posiblemente al menos ambiguo ). ¿Deben imprimirse todas las coincidencias vacías? De hecho, hay infinitas coincidencias de este tipo después de cada palabra en la cadena dada.
La fuente de OpenBSD paragrep
(que muestra el mismo comportamiento que grep
en macOS )contiene(src/usr.bin/grep/util.c
):
if (r == 0) {
c = 1;
if (oflag && pmatch.rm_so != pmatch.rm_eo)
goto print;
break;
}
}
if (oflag)
return c;
print:
Básicamente, esto dice que si el patrón coincide con(r == 0
)y si estamos usando -o
(oflag
), y si el desplazamiento inicial de la coincidencia es el mismo que el desplazamiento final de la coincidencia (pmatch.rm_so == pmatch.rm_eo
, es decir, una coincidencia vacía ), entonces el resultado de la coincidencia es no impreso y la coincidencia en esta línea particular de entrada termina(return c
con c == 1
para "coincidencia encontrada" ).
OpenSUSE 10.2 является EOL с 11 -30 -2008 года. Я рекомендую выполнить обновление до поддерживаемой версии, например 15.1 или 42.3.
Если вы настаиваете на использовании того, что у вас есть, вам придется собирать пакет из исходного кода, как вы это делаете с PHP. Затем вы добавите его двоичные и библиотечные каталоги в PATH и LD _LIBRARY _PATH.
Если вы используете поддерживаемую версию, вы можете просто использовать zypper
для установки php и любых других пакетов, потому что в настоящее время вам придется собирать все из исходного кода, которого нет на этом DVD.
Если вам это все еще нужно, это может помочь
yum install epel-release
yum install libmcrypt-devel