Замена в поисковом запросе - на :

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Замена в поисковом запросе - на :

Сообщение Voler » 23.10.2015 08:17

Всем привет.

cat /var/log/messages | grep -i C8:D3:A3:43:3F:80
или
cat /var/lib/arpwath/iparp | grep -i C8:D3:A3:43:3F:80

Суть проблемы, что на Dlink мак адреса выглядят вот так C8-D3-A3-43-3F-80
Подскажите как мне в запросе поменять налету - на :

Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 806
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение s.xbatob » 23.10.2015 09:31

с помощью tr
Спасибо сказали:

Kopilov
Сообщения: 662
ОС: Gentoo, Debian

Re: Замена в поисковом запросе - на :

Сообщение Kopilov » 23.10.2015 10:16

Или sed
Про tr не знал, спасибо.
Спасибо сказали:

Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: Замена в поисковом запросе - на :

Сообщение yars » 23.10.2015 10:27

Или regex составить, но я в них не силен.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Замена в поисковом запросе - на :

Сообщение SLEDopit » 23.10.2015 11:01

я так понимаю вам нужно не только один определённый мак вытаскивать. а вообще все маки из лога, а потом менять. это выглядит примерно так:

Код: Выделить всё

grep -i "\([A-F0-9]\{2\}[:-]\)\{5\}[A-F0-9]\{2\}" /var/lib/arpwath/iparp | tr ':' '-'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Аватара пользователя
yars
Сообщения: 1144
Статус: Slacker!
ОС: Slackware64-current

Re: Замена в поисковом запросе - на :

Сообщение yars » 23.10.2015 11:24

Если нужны только MAC-и, без прочего текста в попавших под шаблон строках, у grep есть ключик -o.
P.S. Ну и cat | grep уже обсуждали, здесь cat не нужен.
Slackware64-current/Xfce 4.12/Acer TravelMate 5760
-------------
Registered Linux User #557010
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 23.10.2015 12:03

Еще раз поясню, cat /var/lib/arpwath/iparp | grep -i C8:D3:A3:43:3F:80
И этот мак C8:D3:A3:43:3F:80, я исправляю ручками.

Вопрос как можно сделать, так чтобы если я использую мак C8-D3-A3-43-3F-80, то нужно налету в маке поменять - на :
Т.е. не то что на выходе, а то что на входе.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Замена в поисковом запросе - на :

Сообщение Bizdelnick » 23.10.2015 12:25

Voler писал(а):
23.10.2015 12:03
Вопрос как можно сделать

Так, как сказано в первом же ответе.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 23.10.2015 12:49

Вопрос в том, как сделать правильнее
echo 00-1b-21-36-05-d7 > /tmp/mac | cat /tmp/mac | tr '-' ':'

Вот пример работает
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Замена в поисковом запросе - на :

Сообщение Bizdelnick » 23.10.2015 12:57

cat /var/log/messages | tr - : | grep -i C8:D3:A3:43:3F:80

Voler писал(а):
23.10.2015 12:49
echo 00-1b-21-36-05-d7 > /tmp/mac | cat /tmp/mac | tr '-' ':'

Вы тут что-то странное пытаетесь сделать. Если используете временный файл, то зачем пайп?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 23.10.2015 13:02

Это вариант работает, но мне нужно именно поиск делать по мак адресу 00-1b-21-36-05-d7
т.е. вы предлагаете все мак адреса переделывать во вхождении, а нужно на оборот один.

Вот это вариант лучше, ваш не плохо но если кол-во записей за пару тысяч.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Замена в поисковом запросе - на :

Сообщение Bizdelnick » 23.10.2015 13:11

Voler писал(а):
23.10.2015 13:02
Это вариант работает, но мне нужно именно поиск делать по мак адресу 00-1b-21-36-05-d7
т.е. вы предлагаете все мак адреса переделывать во вхождении, а нужно на оборот один.

Вам не всё равно? Лишнее grep в любом случае отбросит.

Voler писал(а):
23.10.2015 13:02
если кол-во записей за пару тысяч

Shell

% for i in `seq 9001`; do echo 00-00-00-00-00-00 >> macs; done % echo 00-1b-21-36-05-d7 >> macs % wc -l macs 9002 macs % time cat macs | tr - : | grep -i 00:1b:21:36:05:d7 00:1b:21:36:05:d7 cat macs 0,00s user 0,00s system 0% cpu 0,027 total tr - : 0,00s user 0,00s system 0% cpu 0,026 total grep --color=auto -i 00:1b:21:36:05:d7 0,00s user 0,00s system 0% cpu 0,026 total %


Тупая замена tr работает быстрее более хитрых вариантов с регулярками.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Замена в поисковом запросе - на :

Сообщение SLEDopit » 23.10.2015 13:14

Voler писал(а):
23.10.2015 13:02
т.е. вы предлагаете все мак адреса переделывать во вхождении, а нужно на оборот один.
что именно в итоге нужно то?
найти все вхождения конкретного адреса 00-1b-21-36-05-d7 и переделать - на : ?
или искать конкретный адрес 00-1b-21-36-05-d7 учитывая, что вхождения могут быть как с : так и с -?
или просто вытащить любые встречающиеся маки с : или -?
и ещё 100500 вариантов. или вы предлагаете поупражняться нам в телепатии?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 23.10.2015 16:49

или искать конкретный адрес 00-1b-21-36-05-d7 учитывая, что вхождения могут быть как с : так и с -?
Вот это нужно
Спасибо сказали:

moshell
Сообщения: 27

Re: Замена в поисковом запросе - на :

Сообщение moshell » 25.10.2015 01:39

Voler писал(а):
23.10.2015 16:49
или искать конкретный адрес 00-1b-21-36-05-d7 учитывая, что вхождения могут быть как с : так и с -?
Вот это нужно

выбирай

$ echo -e "C8:D3:A3:43:3F:80\nC8-D3-A3-43-3F-80" | perl -ne 'print if /c8[-:]d3[-:]a3[-:]43[-:]3f[-:]80/i'
C8:D3:A3:43:3F:80
C8-D3-A3-43-3F-80

$ echo -e "C8:D3:A3:43:3F:80\nC8-D3-A3-43-3F-80" | grep -iE "c8[-:]d3[-:]a3[-:]43[-:]3f[-:]80"
C8:D3:A3:43:3F:80
C8-D3-A3-43-3F-80
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 806
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение s.xbatob » 25.10.2015 11:54

Sed забыли! :)
И чего только не напридумают любители всё делать через [censored]
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 25.10.2015 12:52

s.xbatob писал(а):
25.10.2015 11:54
Sed забыли! :)
И чего только не напридумают любители всё делать через [censored]


В идеале нужен вариант где мак - 28-10-7B-EF-3B-09 используется именно в этом виде.

Дальше я запускаю команду ./mac_find.sh 28-10-7B-EF-3B-09
1. Происходит конвертация с 28-10-7B-EF-3B-09 в 28:10:7B:EF:3B:09 и поиск последнего там где нужно
tr работает хорошо, но когда пишу в скрипт

Код: Выделить всё

#!/bin/bash

echo $1 > /tmp/mac | cat /tmp/mac | tr '-' ':' > /tmp/mac


Не отрабатывает и в файл не попадает значение.
Спасибо сказали:

moshell
Сообщения: 27

Re: Замена в поисковом запросе - на :

Сообщение moshell » 25.10.2015 12:53

s.xbatob писал(а):
25.10.2015 11:54
Sed забыли! :)

$ echo -e "C8:D3:A3:43:3F:80\nC8-D3-A3-43-3F-80" | sed /c8.d3.a3.43.3f.80/p
C8:D3:A3:43:3F:80
C8-D3-A3-43-3F-80
$ echo -e "C8:D3:A3:43:3F:80\nC8-D3-A3-43-3F-80" | awk /c8.d3.a3.43.3f.80/p
C8:D3:A3:43:3F:80
C8-D3-A3-43-3F-80

не, не катит. у доктора спроси. он сед пропагандирует
s.xbatob писал(а):
25.10.2015 11:54
И чего только не напридумают любители всё делать через [censored]

а ты как делаешь?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Замена в поисковом запросе - на :

Сообщение Bizdelnick » 25.10.2015 14:09

Voler писал(а):
25.10.2015 12:52
tr работает хорошо, но когда пишу в скрипт

Код: Выделить всё

#!/bin/bash

echo $1 > /tmp/mac | cat /tmp/mac | tr '-' ':' > /tmp/mac

Ну и зачем Вы так пишете? Я же Вам уже сказал, что это бред. Или используйте конвейер, или временный файл, одно из двух. Хотя зачем тут временный файл — не представляю. Но если так уж хочется — пишите не в тот файл из которого читаете, а в другой. В Вашей конструкции шелл открывает файл на запись и обнуляет его ещё до того, как cat успевает что-то прочитать.
Потом, непонятно, как именно Вы запускаете этот скрипт. Показывайте полностью, что делаете, что получается, и объясняйте, чем это не устраивает.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 25.10.2015 19:03

Bizdelnick
В идеале ./script C8-D3-A3-43-3F-80

Лучше конвертировать мак адрес налету без временного файла, и осуществлять полученный результат в скрипте для дальнейшего использования.
Т.е. поиск вести по маку C8:D3:A3:43:3F:80.

Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 806
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение s.xbatob » 25.10.2015 19:24

moshell писал(а):
25.10.2015 12:53
а ты как делаешь?

Делаю - что?
Я понятия не имею что хочет автор поста и зачем ему это надо. На тот вопрос, что он задал, я сразу ответил, причём так же подробно, как он спросил :)
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 25.10.2015 20:46

s.xbatob лучше привести пример, а не писать не нужный пост.
За tr спасибо, реально работает.

Суть проблемы, что на Dlink мак адреса выглядят вот так C8-D3-A3-43-3F-80
Разве я не написал за чем нужно?
Спасибо сказали:

Аватара пользователя
bormant
Сообщения: 1187

Re: Замена в поисковом запросе - на :

Сообщение bormant » 25.10.2015 21:24

Voler
так и не понял, что именно было нужно, но одно из должно подойти:

Код: Выделить всё

grep -i C8[:-]D3[:-]A3[:-]43[:-]3F[:-]80 /var/log/messages
grep -i C8[:-]D3[:-]A3[:-]43[:-]3F[:-]80 /var/log/messages | tr '-' ':'
grep -i C8[:-]D3[:-]A3[:-]43[:-]3F[:-]80 /var/log/messages | tr ':' '-'
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15814
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Замена в поисковом запросе - на :

Сообщение Bizdelnick » 25.10.2015 22:14

Voler писал(а):
25.10.2015 19:03
В идеале ./script C8-D3-A3-43-3F-80

Код: Выделить всё

#!/bin/sh
result="$(echo "$1" | tr - : | grep -i C8:D3:A3:43:3F:80)"
if [ -n "$result" ] ; then
    # делайте с ним что хотите
fi
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Voler
Сообщения: 490
ОС: Fedora

Re: Замена в поисковом запросе - на :

Сообщение Voler » 03.11.2015 15:35

Подправил

Код: Выделить всё

#!/bin/sh
result="$(echo "$1" | tr - :)"
if [ -n "$result" ] ; then
    # делайте с ним что хотите
    arp -a | grep $result
fi

Спасибо сказали: