Tengo un archivo que consta de una URL . Estoy tratando de obtener la URL de ese archivo usando un script de shell.
En el archivo, la URL es así:
('URL', 'http://url.com');
Traté de usar lo siguiente:
cat file.php | grep 'URL' | awk '{ print $2 }'
Da la salida como:
'http://url.com');
Pero solo necesito obtener url.com
una variable dentro del script de shell. ¿Cómo puedo lograr esto?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
no diourl.com
/
in sed, generalmente debería usar un delimitador diferente, por ejemplosed s@http://@@g
.Puedes hacer todo con un simple
grep
:De
man grep
:El truco es usar lo
\K
que, en Perl regex, significadiscard everything matched to the left of the \K
. Por lo tanto, la expresión regular busca cadenas que comienzan conhttp://
(que luego se descartan debido a\K
) seguidas de la mayor cantidad'
posible de no caracteres. En combinación con-o
esto, esto significa que solo se imprimirá la URL.También puedes hacerlo en Perl directamente:
fuente
Prueba esto,
fuente
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
a una url diferente, así como abc.com, es dinámico y necesito tomar esta url usando el script de shell.Revisando esto nuevamente, y tratando de usar nada más que un shell Bash, otra solución de una línea es:
Donde file.in contiene la lista de URL 'sucia' y file.out contendrá la lista de URL 'limpia'. No hay dependencias externas y no hay necesidad de generar nuevos procesos o subcapas. La explicación original y un guión más flexible siguen. Hay una buena Resumen del método aquí , véase el ejemplo 10-10. Esta es la sustitución de parámetros basada en patrones en Bash.
Ampliando la idea:
Resultado:
No es necesario llamar a ningún programa externo. Además, el siguiente script bash
get_urls.sh
, le permite leer un archivo directamente o desde stdin:fuente
[t]csh
, por lo que es bueno para sh, bash, dash, ksh, zsh ...Si todas las líneas contienen una URL:
Si solo algunas líneas contienen una URL:
Dependiendo de las otras líneas, puede que necesite cambiar la
^define
expresión regularfuente
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Simple:
y si necesita eliminar el 'http: //', entonces:
Entonces:
Si necesita cierta parte de la URL, necesita refinar su terminología, una URL es todo lo siguiente, a veces más:
fuente
para mí, las otras
grep
respuestas dan información de cadena de retorno después del enlace.Esto funcionó para mí solo para sacar el
url
:fuente