Revisando esto nuevamente, y tratando de usar nada más que un shell Bash, otra solución de una línea es:
while read url; do url="${url##*/}" && echo "${url%%\'*}"; done < file.in > file.out
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:
src="define('URL', 'http://url.com');"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
Resultado:
url.com
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:
#!/usr/bin/env bash
# usage:
# ./get_urls.sh 'file.in'
# grep 'URL' 'file.in' | ./get_urls.sh
# assumptions:
# there is not more than one url per line of text.
# the url of interest is a simple one.
# begin get_urls.sh
# get_url 'string'
function get_url(){
local src="$1"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
}
# read each line.
while read line
do
echo "$(get_url "$line")"
done < "${1:-/proc/${$}/fd/0}"
# end get_urls.sh
cat file.php | grep 'URL' | cut -d "'" -f 4
.