Saya punya file yang terdiri dari URL . Saya mencoba mendapatkan URL dari file itu menggunakan skrip shell.
Dalam file tersebut, URL-nya adalah seperti ini:
('URL', 'http://url.com');
Saya mencoba menggunakan yang berikut ini:
cat file.php | grep 'URL' | awk '{ print $2 }'
Ini memberikan output sebagai:
'http://url.com');
Tapi saya hanya perlu mendapatkan url.com
variabel di dalam skrip shell. Bagaimana saya bisa mencapai ini?
cat file.php | grep 'URL' | cut -d "'" -f 4
.http://url.com
bukanurl.com
/
sed, Anda biasanya harus menggunakan pembatas yang berbeda, misalnyased s@http://@@g
.Anda dapat melakukan semuanya dengan sederhana
grep
:Dari
man grep
:Triknya adalah menggunakan
\K
yang, dalam Perl regex, artinyadiscard everything matched to the left of the \K
. Jadi, ekspresi reguler mencari string yang dimulai denganhttp://
(yang kemudian dibuang karena\K
) diikuti oleh sebanyak mungkin non-'
karakter. Dikombinasikan dengan-o
, ini berarti hanya URL yang akan dicetak.Anda juga bisa melakukannya di Perl secara langsung:
sumber
Coba ini,
sumber
echo "define('URL', 'http://url.com');" | awk -F// '{print $2}' | cut -d "'" -f 1
url.com
untuk url yang berbeda juga seperti abc.com dinamis dan saya perlu mengambil url ini menggunakan skrip shell.Meninjau kembali ini, dan mencoba untuk tidak menggunakan apa pun selain Bash shell, solusi satu baris lainnya adalah:
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:
Hasil:
Tidak perlu memanggil program eksternal apa pun. Selanjutnya, skrip bash berikut
get_urls.sh
,, memungkinkan Anda untuk membaca file secara langsung atau dari stdin:sumber
[t]csh
, jadi itu bagus untuk sh, bash, dash, ksh, zsh ...Jika semua baris berisi URL:
Jika hanya beberapa baris yang berisi URL:
Tergantung pada baris lain Anda mungkin perlu mengubah
^define
regexsumber
awk -F"'|http://" '/^define/ {print $5}' file.php | cut -d ")" -f 1
Sederhana:
dan jika Anda perlu menghapus 'http: //', maka:
Begitu:
Jika Anda memerlukan bagian tertentu dari URL yang Anda perlukan untuk mempersempit terminologi Anda, URL adalah semua yang berikut, terkadang lebih:
sumber
bagi saya,
grep
jawaban lain diberikan informasi string kembali setelah tautan.Ini berhasil bagi saya untuk hanya mengeluarkan
url
:sumber