|
|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Serge 2:5020/400 08 Jun 2005 09:43:05 To : Eugene Grosbein Subject : Re: поиск -------------------------------------------------------------------------------- Когда часы показывали Wed, 08 Jun 2005 11:43:19 +0400 "Eugene Grosbein", a.k.a. "EG", писал(а) о "поиск": EG> Привет! EG> EG> Есть текстовый файл file, в котором перечислены IP-адреса, по одному EG> в строке, а каждая вторая строка несет в себе атрибут IP, стоящего EG> выше EG> EG> 1.1.1.111 EG> attrib1 EG> 1.111.1.1 EG> attrib2 EG> EG> Из шелла надо узнать, есть ли в нем адрес 1.1.1.1, и если есть, EG> получить атрибут. Атрибуты начинаются с буквы. EG> EG> Так не получается: EG> EG> if fgrep -q $ip file; then EG> echo Есть: fgrep -A 1 $ip file | tail -1 EG> fi grep берёт аргумент в виде perl-шаблона. Д/з: узнать, что означает символ "." в таком шаблоне, и как всё же передать ему именно "точку". EG> Ложное срабатывание на первой строчке. EG> EG> Так тоже не получается: EG> EG> if grep -q "^$ip$" file; then EG> echo Есть: grep -A 1 "^$ip$" file | tail -1 EG> fi EG> EG> Ложное срабатывание на второй строчке. EG> EG> Как проще сделать такое? Обработать предварительно $ip нужным образом. Где-то, самое удобное, sed-ом: $ ip=1.1.1.1; echo -e '1.1.1.1\nasdf\n1.11.1.11\njkl;'\ |grep -A1 "^`echo $ip|sed 's~\.~\\\.~g'`$"|tail -n 1 asdf С другой стороны, это не совсем удобно, городить такую конструкцию на sh+grep+sed+tail, когда можно обойтись одним awk или реализовать поиск самостоятельно циклом в shell. --- ifmail v.2.15dev5.3 * Origin: Member ID not found! (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix/11846104d3f60.html, оценка из 5, голосов 10
|