Meninjau kembali ini, dan mencoba untuk tidak menggunakan apa pun selain Bash shell, solusi satu baris lainnya adalah:
while read url; do url="${url##*/}" && echo "${url%%\'*}"; done < file.in > file.out
Di mana file.in berisi daftar url 'kotor' dan file.out akan berisi daftar URL 'bersih'. Tidak ada dependensi eksternal dan tidak perlu menelurkan proses atau subkulit baru. Penjelasan asli dan skrip yang lebih fleksibel berikut. Ada ringkasan yang bagus dari metode ini di sini , lihat contoh 10-10. Ini adalah substitusi parameter berdasarkan pola di Bash.
Memperluas gagasan:
src="define('URL', 'http://url.com');"
src="${src##*/}" # remove the longest string before and including /
echo "${src%%\'*}" # remove the longest string after and including '
Hasil:
url.com
Tidak perlu memanggil program eksternal apa pun. Selanjutnya, skrip bash berikut get_urls.sh
,, memungkinkan Anda untuk membaca file secara langsung atau dari 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
.