visudo и
Defaults env_keep += "EDITOR"
спасибо Sato Katsura за указание на меня
Вы можете использовать cut
илиsed
:
echo 192.168.15.73.64759 | cut -d '.' -f 1-4
echo 192.168.15.73.64759 | sed -E 's,\.[0-9]+$,,'
Илиawk
:
echo 192.168.15.73.64759 | awk -F '.' '{print $1"."$2"."$3"."$4}'
Использовать замену строки:
$ IP=192.168.15.73.64759
$ echo ${IP%.*}
192.168.15.73
IP=$(netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}')
echo ${IP%.*}
Только что узнав о сс:
ss -n -o state established '( dport = :telnet or sport = :ssh )' |
awk 'NR==2 { print substr($5, 1, index($5, ":")-1) }'
Я использую NR==2, чтобы пропустить заголовок и получить только первую строку вывода, чтобы соответствовать вашему поведению netstat/grep. Остальная часть awk-кода печатает $5, но начиная с первого символа и продолжая только до индекса, в котором найдено «:», минус один.
Если в системе отсутствует ss
, то можно использовать sed:
echo 192.168.15.73.64759 | sed 's/\.[0-9]*$//'
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' | sed 's/\.[0-9]*$//'
Это заменяет «точка, за которой следует ноль или более цифр, за которыми следует конец строки» на «ничего».
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' |grep -Po "\b(?:\d{1,3}\.){3}\d{1,3}\b"
Вы также можете сделать это с помощьюgrep -E
in="192.168.15.73.64759"
echo $in | grep -Eo "([[:digit:]]{1,3}\.){4}" | grep -Po "(.*)(?=\.$)
~#: 192.168.15.73
-E позволяет использовать расширенные регулярные выражения, а -P для совместимости с Perl позволяет включать последнюю точку в шаблон, но исключать ее из вывода