Альтернативой является Google DNS:
myip(){ dig @8.8.8.8 -t txt o-o.myaddr.l.google.com |
grep "client-subnet" |
grep -o "\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)" ; }
Если в вашей системе нет dig, то хост будет точно эквивалентен:
myip(){ host -t txt o-o.myaddr.l.google.com 8.8.8.8 |
grep -oP "client-subnet \K(\d{1,3}\.){3}\d{1,3}"; }
Оба GNU grep (Perl -подобное -P
) и базовое (BRE) регулярное выражение.
И, конечно же, оригинальный сайт тоже будет работать.
С dig:
myip(){ dig myip.opendns.com @208.67.220.222 |
grep "^myip\.opendns\.com\." |
grep -o "\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)" ; }
И с хостом:
myip(){ host myip.opendns.com 208.67.220.222 |
grep -oP "^myip\.opendns\.com.* \K(\d{1,3}\.){3}(\d{1,3})" ; }
Два приведенных выше фрагмента будут работать с любым из этих четырех адресов преобразователя OpenDNS:
echo 208.67.22{0,2}.22{0,2}
Если решение прямого DNS не сработает в будущем, используйте curl на один из этих сайтов (urls):
IFS=$'\n' read -d '' -a urls <<-'_end_of_text_'
api.ipify.org
bot.whatismyipaddress.com/
canhazip.com/
checkip.dyndns.com/
corz.org/ip
curlmyip.com/
eth0.me/
icanhazip.com/
ident.me/
ifcfg.me/
ifconfig.me/
ip.appspot.com/
ipecho.net/plain
ipof.in/txt
ip.tyk.nu/
l2.io/ip
tnx.nl/ip
wgetip.com/
whatismyip.akamai.com/
_end_of_text_
Вызовите адрес массива следующим образом:
$ i=5; curl -m10 -L "http://${urls[i]}"
116.132.27.203
На некоторых сайтах https также может работать.
awk -vFS="" -vOFS="" 'NR>1 {$13=$13":"}1' file
"Date","Time","Open","High","Low","Close","Volume"
06/28/2004,09:31,37.49,37.50,37.45,37.46,1049200
06/28/2004,09:32,37.48,37.50,37.45,37.48,450700
06/28/2004,09:33,37.48,37.50,37.46,37.49,493700
06/28/2004,09:34,37.49,37.50,37.47,37.47,756100
06/28/2004,09:35,37.48,37.49,37.46,37.48,309000
-vFS="" -vOFS=""
устанавливает для разделителей полей ввода и вывода значение «нет».
NR>1
чтобы избежать изменений в первой строке, т.е. изменения будут применяться начиная с строки #2
{$13=$13":"}
вставит двоеточие после строки 13