В данном случае есть интересные факты, особенно эти:
dd
и pv
) контрольные суммы являются идентичными. dd
открыть диск и закрыть его тем же самым диском, а затем закончить тест процедурой pv
. Сделав это, я получил идентичные копии с обеих процедур. dd
w/o параметр count=X
правильно останавливается в конце диска и дает то же самое изображение диска, что и с pv
(контрольные суммы идентичны), поэтому мне лучше использовать dd
w/o параметры или просто pv
. Итак, на данный момент, кажется, что pv
и dd
могут сделать копию CD/DVD с теми же результатами.
Puedo darle una solución simple awk.
php -i | awk -F ' => ' '/extension_dir/{print $2; exit}'
Eso funcionará si quieres perder el sed.
EDITAR :Se movió la salida al interior del bloque para evitar un error de sintaxis, se agregaron espacios alrededor del separador de campo para que no se envíen con la ruta de archivo resultante y se describa el cambio en el cuerpo, por lo que stackexchange permite la edición debido al mínimo limitación de cambio de carácter.
php -i | sed -n '/extension_dir/{s/^[^/]*//;s/ *=>.*$//;p;}'
o, como se sugiere en los comentarios a continuación,
php -i | sed '/extension_dir/!d;s/[^/]*//;s/ *=>.*//'
El sed
anterior reemplaza su grep
y, por cada línea que coincida con extensions_dir
, primero eliminará todo hasta el primer /
y luego todo desde el primer =>
en adelante en el cadena modificada. Cualquier espacio antes del =>
también se elimina. Las líneas que no coinciden con extensions_dir
se ignoran.
Esto devolverá la ruta deseada para la primera línea de entrada y una línea vacía para la segunda.
Para ignorar la segunda línea de entrada, use /^extension_dir/
en lugar de /extension_dir/
en el sed
anterior. Esto descartará la segunda línea ya que no comienza con esa cadena.
Es la combinación de sus dos sed
scripts lo que produce el resultado sorprendente para la segunda línea de entrada.
La línea es
sqlite3.extension_dir => no value => no value
y el primero sed
modificará esto a
sqlite3.no value => no value
El segundo sed
eliminará el bit => no value
al final.
Tenga en cuenta que
echo $(... )
es un poco inútil ya que engulle las nuevas líneas en la salida del comando dentro de $(... )
. En su lugar, pruebe solo con el comando sin la sustitución del comando echo
o $(... )
.
Es posible que este uso de echo
lo haya confundido acerca de la naturaleza de la salida de php -i
ygrep
(dos líneas coincidentes en lugar de una ).
Если путь не содержит пробелов, этого выражения будет достаточно:
php -i | grep -Po 'extension_dir => \K/[^ ]*'
Вход
extension_dir => /some/path/php/extensions/no-debug-non-zts-20160303 => /some/path/php/extensions/no-debug-non-zts-20160303
sqlite3.extension_dir => no value => no value
Выход
/some/path/php/extensions/no-debug-non-zts-20160303