#!/usr/local/bin/nawk -f # # Extract URLs from a text file and view with browser # BEGIN { # Text-mode browser tbrowser = "lynx" # Graphical browser # gbrowser = "/usr/compat/linux/usr/local/mozilla/mozilla" gbrowser = "openurl" browser = (ENVIRON["DISPLAY"] && gbrowser) ? gbrowser : tbrowser pager = ENVIRON["PAGER"] ? ENVIRON["PAGER"] : "more" FS = "\n" } /(https?|ftp|telnet):\/\/[^[:punct:][:space:]]+/ { tmp = $0 while (1) { if (! (p = match(tmp, \ /(https?|ftp|telnet):\/\/[^[:punct:][:space:]]+/))) { break } url = substr(tmp, p) sub(/[[:space:]]+.*$/, "", url) sub(/[[:punct:]]+$/, "", url) u[n++] = url tmp = substr(tmp, p + length(url)) } } function quit() { system("rm -f " tmpfile) exit } END { if (! n) { print "No URL found" exit } if (("mktemp ~/.viewurl.XXXXXX" | getline tmpfile) == 0) exit for (i = 0; i < n; i++) printf "%3d: %s\n", i + 1, u[i] > tmpfile while (1) { system(pager " " tmpfile) do { err = 0 printf "URL (1-" n "), 0 to exit: " if ((getline < "/dev/tty") <= 0) quit() r = ($0 ~ /^[0-9]+$/) ? $0 : -1 if (r == 0) quit() if ((r < 0) || (r > n)) { print "Error: invalid response" err++ } } while (err) url = u[r - 1] gsub(/'/, "%27", url) system(browser " '" url "'") } } .