Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182

Замена строк в файле

06.04.2015, 17:05. Показов 3799. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите плз. Есть скрипт который собирает маки и ложит в файл. Файл получается такой:
spawn ssh 10.41.120.53^M
^M
^M05-Jan-2000 04:33:56 %MSCM-I-NEWTERM: New SSH connection from 10.10.10.10^M^M
User Name:test^M
^MPassword:************^M
^M^M
Artema-23# sh br ad^M
^MAging time is 300 sec^M
^M
Vlan Mac Address Port Type ^M
-------- --------------------- ------ ---------- ^M
1 00:15:c5:2a:12:78 1/g1 dynamic ^M
1 00:15:c5:2c:a5:4a 1/g1 dynamic ^M
980 00:11:5b:65:26:bb 1/g1 dynamic ^M
980 00:15:6d:5e:a1:5d 1/g1 dynamic ^M
980 00:15:6d:5e:a6:b0 1/g1 dynamic ^M
980 00:1c:c4:48:e2:1d 1/g1 dynamic ^M
980 00:1d:60:36:14:4b 1/g1 dynamic ^M
980 00:1e:8c:18:f0:7d 1/g1 dynamic ^M
980 00:21:97:36:23:d5 1/g1 dynamic ^M
980 00:24:1d:67:3a:a4 1/g1 dynamic ^M
980 00:24:54:cf:b8:b8 1/g1 dynamic ^M
980 00:25:22:82:52:9b 1/g1 dynamic ^M
980 00:26:18:eb:ca:bb 1/g1 dynamic ^M
980 00:27:22:76:fc:85 1/g1 dynamic ^M
980 00:27:22:76:fc:87 1/g1 dynamic ^M
980 00:27:22:dc:74:b0 1/g1 dynamic ^M
980 00:27:22:e4:db:62 1/g1 dynamic ^M
980 00:30:67:34:01:27 1/g1 dynamic ^M
980 00:30:67:34:5f:1d 1/g1 dynamic ^M
980 00:30:67:7f:90:52 1/g1 dynamic ^M
980 00:30:67:95:46:a2 1/g1 dynamic ^M
980 00:30:67:fb:06:ba 1/g1 dynamic ^M
^[[0mMore: <space>, Quit: q, One line: <return> ^M ^M 980 00:60:6e:42:6c:86 1/e11 dynamic ^M
980 00:e0:4c:62:0a:90 1/g1 dynamic ^M
980 00:e0:4d:7a:ca:0f 1/g1 dynamic ^M
980 00:e0:4d:9a:9a:aa 1/g1 dynamic ^M
980 00:e0:4d:b9:bc:d8 1/g1 dynamic ^M
980 00:e0:52:b7:72:b7 1/g1 dynamic ^M
980 00:e0:52:f4:70:6c 1/g1 dynamic ^M
980 00:e0:52:fb:41:64 1/g1 dynamic ^M
980 08:60:6e:86:8e:73 1/g1 dynamic ^M
980 08:60:6e:ee:be:04 1/g1 dynamic ^M
980 08:60:6e:f1:39:2b 1/g1 dynamic ^M
980 10:fe:ed:07:13:95 1/g1 dynamic ^M
980 10:fe:ed:79:55:3b 1/e20 dynamic ^M
980 10:fe:ed:fd:9c:57 1/g1 dynamic ^M
980 1c:6f:65:fe:d7:8e 1/g1 dynamic ^M
980 20:89:84:93:f8:88 1/g1 dynamic ^M
980 20:89:84:d9:8a:0f 1/g1 dynamic ^M
980 20:cf:30:a7:90:fa 1/g1 dynamic ^M
980 20:cf:30:bd:b1:e1 1/g1 dynamic ^M
980 24:a4:3c:42:c7:c8 1/g1 dynamic ^M
980 24:a4:3c:42:c9:f6 1/g1 dynamic ^M
980 24:a4:3c:42:cb:c8 1/g1 dynamic ^M
^[[0mMore: <space>, Quit: q, One line: <return> ^M ^M 980 24:a4:3c:42:cc:36 1/g1 dynamic ^M
980 24:a4:3c:48:0d:d5 1/g1 dynamic ^M
980 24:a4:3c:48:f1:b1 1/g1 dynamic ^M
980 24:a4:3c:7a:ba:aa 1/g1 dynamic ^M

Это если я захожу в него через VI редактор. Если вывести файл с помощью cat , то получаю :
root@SW-Cacti:/home/den4ik# cat /srv/dell-3324/fdb-3324.log
spawn ssh 10.41.120.53

05-Jan-2000 04:33:56 %MSCM-I-NEWTERM: New SSH connection from 10.10.10.10
User Name:test
Password:************

Artema-23# sh br ad
Aging time is 300 sec

Vlan Mac Address Port Type
-------- --------------------- ------ ----------
1 00:15:c5:2a:12:78 1/g1 dynamic
1 00:15:c5:2c:a5:4a 1/g1 dynamic
980 00:11:5b:65:26:bb 1/g1 dynamic
980 00:15:6d:5e:a1:5d 1/g1 dynamic
980 00:15:6d:5e:a6:b0 1/g1 dynamic
980 00:1c:c4:48:e2:1d 1/g1 dynamic
980 00:1d:60:36:14:4b 1/g1 dynamic
980 00:1e:8c:18:f0:7d 1/g1 dynamic
980 00:21:97:36:23:d5 1/g1 dynamic
980 00:24:1d:67:3a:a4 1/g1 dynamic
980 00:24:54:cf:b8:b8 1/g1 dynamic
980 00:25:22:82:52:9b 1/g1 dynamic
980 00:26:18:eb:ca:bb 1/g1 dynamic
980 00:27:22:76:fc:85 1/g1 dynamic
980 00:27:22:76:fc:87 1/g1 dynamic
980 00:27:22:dc:74:b0 1/g1 dynamic
980 00:27:22:e4:db:62 1/g1 dynamic
980 00:30:67:34:01:27 1/g1 dynamic
980 00:30:67:34:5f:1d 1/g1 dynamic
980 00:30:67:7f:90:52 1/g1 dynamic
980 00:30:67:95:46:a2 1/g1 dynamic
980 00:30:67:fb:06:ba 1/g1 dynamic
980 00:60:6e:42:6c:86 1/e11 dynamic
980 00:e0:4c:62:0a:90 1/g1 dynamic
980 00:e0:4d:7a:ca:0f 1/g1 dynamic
980 00:e0:4d:9a:9a:aa 1/g1 dynamic
980 00:e0:4d:b9:bc:d8 1/g1 dynamic
980 00:e0:52:b7:72:b7 1/g1 dynamic
980 00:e0:52:f4:70:6c 1/g1 dynamic
980 00:e0:52:fb:41:64 1/g1 dynamic
980 08:60:6e:86:8e:73 1/g1 dynamic
980 08:60:6e:ee:be:04 1/g1 dynamic
980 08:60:6e:f1:39:2b 1/g1 dynamic
980 10:fe:ed:07:13:95 1/g1 dynamic
980 10:fe:ed:79:55:3b 1/e20 dynamic
980 10:fe:ed:fd:9c:57 1/g1 dynamic
980 1c:6f:65:fe:d7:8e 1/g1 dynamic
980 20:89:84:93:f8:88 1/g1 dynamic
980 20:89:84:d9:8a:0f 1/g1 dynamic
980 20:cf:30:a7:90:fa 1/g1 dynamic
980 20:cf:30:bd:b1:e1 1/g1 dynamic
980 24:a4:3c:42:c7:c8 1/g1 dynamic
980 24:a4:3c:42:c9:f6 1/g1 dynamic
980 24:a4:3c:42:cb:c8 1/g1 dynamic
980 24:a4:3c:42:cc:36 1/g1 dynamic
980 24:a4:3c:48:0d:d5 1/g1 dynamic
980 24:a4:3c:48:f1:b1 1/g1 dynamic
980 24:a4:3c:7a:ba:aa 1/g1 dynamic
980 24:a4:3c:7a:bc:98 1/g1 dynamic
980 24:a4:3c:7a:c2:d0 1/g1 dynamic
980 28:10:7b:ef:cb:53 1/g1 dynamic
980 30:85:a9:97:a1:23 1/g1 dynamic
980 30:f9:ed:a8:be:4e 1/g1 dynamic
980 40:61:86:ab:40:85 1/g1 dynamic
980 50:46:5d:0d:40:04 1/e2 dynamic
980 50:46:5d:8c:05:c6 1/g1 dynamic
980 50:e5:49:69:e8:9b 1/g1 dynamic
980 60:a4:4c:32:7b:20 1/g1 dynamic
980 60:a4:4c:78:aa:d8 1/g1 dynamic
980 60:a4:4c:d1:9c:88 1/g1 dynamic
980 64:66:b3:00:c1:c5 1/g1 dynamic
980 64:66:b3:01:02:3c 1/g1 dynamic
980 6c:62:6d:ed:35:37 1/g1 dynamic
980 74:86:7a:5d:82:20 1/g1 dynamic
980 84:c9:b2:57:8a:4a 1/g1 dynamic
980 90:94:e4:25:7b:40 1/g1 dynamic
980 90:94:e4:35:39:f1 1/g1 dynamic
980 90:94:e4:f3:bd:31 1/g1 dynamic
980 90:e2:ba:4d:81:cd 1/g1 dynamic
980 90:e2:ba:55:13:05 1/g1 dynamic
980 90:e6:ba:b6:99:f3 1/g1 dynamic
980 90:f6:52:bc:48:0f 1/g1 dynamic
980 a0:b3:cc:72:4d:f6 1/g1 dynamic
980 a0:f3:c1:44:db:9d 1/g1 dynamic
980 a0:f3:c1:94:5d:79 1/e3 dynamic
980 ac:f1:df:23:9c:1e 1/g1 dynamic
980 b8:70:f4:0b:30:0a 1/g1 dynamic
980 b8:97:5a:17:42:c5 1/g1 dynamic
980 b8:a3:86:19:a8:d7 1/g1 dynamic
980 bc:ae:c5:7c:e9:86 1/g1 dynamic
980 bc:ee:7b:9d:9c:a8 1/g1 dynamic
980 bc:ee:7b:c6:ae:05 1/g1 dynamic
980 bc:f6:85:3f:d6:1b 1/g1 dynamic
980 c0:4a:00:48:2c:03 1/e4 dynamic
980 c8:3a:35:dc:58:a6 1/g1 dynamic
980 c8:3a:35:dd:c5:30 1/g1 dynamic
980 c8:3a:35:dd:c7:d8 1/g1 dynamic
980 c8:3a:35:de:cf:a8 1/g1 dynamic
980 c8:be:19:8c:61:9c 1/g1 dynamic
980 c8:d3:a3:2a:1c:f3 1/e5 dynamic
980 cc:b2:55:9e:e2:ab 1/g1 dynamic
980 d4:3d:7e:94:de:77 1/g1 dynamic
980 d8:50:e6:c7:00:7d 1/g1 dynamic
980 d8:fe:e3:8a:3d:a3 1/g1 dynamic
980 dc:9f:db:0e:51:a2 1/g1 dynamic
980 dc:9f:db:0e:51:ee 1/g1 dynamic
980 dc:9f:db:0e:55:0b 1/g1 dynamic
980 dc:9f:db:0e:55:24 1/g1 dynamic
980 dc:9f:db:0e:ec:39 1/g1 dynamic
980 dc:9f:db:32:01:32 1/g1 dynamic
980 dc:9f:db:32:01:3e 1/g1 dynamic
980 dc:9f:db:34:d6:ec 1/g1 dynamic
980 dc:9f:db:34:d7:6c 1/g1 dynamic
980 dc:9f:db:34:d7:9b 1/g1 dynamic
980 dc:9f:db:34:d7:ab 1/g1 dynamic
980 dc:9f:db:34:d7:d6 1/g1 dynamic
980 dc:9f:db:36:67:f4 1/g1 dynamic
980 dc:9f:db:36:6b:35 1/g1 dynamic
980 dc:9f:db:62:0d:e2 1/g1 dynamic
980 dc:9f:db:62:0f:80 1/g1 dynamic
980 dc:9f:db:98:43:15 1/g1 dynamic
980 e0:3f:49:40:b7:f9 1/g1 dynamic
980 e8:40:f2:db:22:e3 1/g1 dynamic
980 e8:94:f6:4c:32:5f 1/g1 dynamic
980 e8:9a:8f:ad:3c:06 1/g1 dynamic
980 f4:6d:04:91:a2:f5 1/g1 dynamic
980 f4:6d:04:b6:79:0f 1/g1 dynamic
980 f4:6d:04:ce:3c:7b 1/g1 dynamic
980 f4:6d:04:ce:44:31 1/g1 dynamic
980 f4:6d:04:f5:fd:9c 1/g1 dynamic
980 f4:ec:38:80:49:bf 1/g1 dynamic
980 f8:1a:67:01:17:b8 1/g1 dynamic
980 f8:1a:67:98:ab:c1 1/g1 dynamic
981 00:1c:c4:48:e2:1d 1/g1 dynamic
981 90:94:e4:25:7b:40 1/g1 dynamic
981 d8:fe:e3:8a:3d:a3 1/g1 dynamic

Artema-23#
root@SW-Cacti:/home/den4ik#

Вот при выполнении cat, файл получается такого вида при котором дальнейшая его обработка будет проходить без ошибок (следующими скриптами) Что мне и надо. При таком выводе отсутствуют строки ^[[0mMore: <space>, Quit: q, One line: <return> ^M ^M 980 24:a4:3c:42:cc:36 1/g1 dynamic ^M

Можно ли как-то избавится от ^[[0mMore: <space>, Quit: q, One line: <return> ^M
что бы получить строку вида:
980 00:60:6e:42:6c:86 1/e11 dynamic
Пробовал вот так:
sed 's/.*<return>\(.*\)$/\1/g' < /srv/dell-3324/fdb-3424.log > /srv/dell-3324/fdb-3424.1.log

Но так просто удаляется все с <return>. А нужно и пробел удалить вместе с ^M.
Просто следующий скрипт берет переменные по шаблону (часть скрипта):
#!/bin/bash
base=/srv/dell-3324/grep-3324.log
while read line
do
maxport=1/e24
macfail=$(echo $line | cut -d' ' -f2)
portfail=$(echo $line | cut -d' ' -f3)
ip=$(echo $line | cut -f1 /srv/dell-3324/ip-dell-3324.log)
upmac=$(echo $macfail | sed 's/[[:lower:]]/\u&/g')
probelmac=$(echo $upmac | sed 's/:/ /g')
newport=$(echo $portfail | sed 's/1\/e//g')
newmac=$(echo $probelmac | sed 's/ /:/g')

То при его выполнении я получу:
mac = 00:30:67:b6:83:2e
port = 1/e8
mac = 10:fe:ed:79:55:3b
port = 1/e20
mac = 50:46:5d:0d:40:04
port = 1/e2
mac = a0:f3:c1:94:5d:79
port = 1/e3
mac = <space>,
port = Quit:
mac = c8:d3:a3:2a:1c:f3
port = 1/e5

1 не правильный мак адрес с неправильным портом.
Спасибо за помощь.
Вложения
Тип файла: log fdb-3424.log (7.0 Кб, 3 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2015, 17:05
Ответы с готовыми решениями:

Замена символов в файле
Добрый день. Помогите, пожалуйста. Еcть текстовый файл (к примеру А) В нём: label_1, label_2,label_3 Нужен shell-скрипт, который ...

Поиск и замена данных в файле
день добрый, итак на хостинге есть файлы пхп мне надо заменить переменные в файлах на свои делаю через путти, пока что лишь могу найти...

Замена строки в файле, подсчет совпадений
Добрый день! Большая просьба помочь в написании Shell - процедуры (Unix). Я в этом ВООБЩЕ понимаю, поэтому обращаюсь к вам. Задание: ...

31
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.04.2015, 17:53
Где Вы увидели переенные "по шаблону"? Кроме того, что кто Вас учил обрабатывать переменные с помощью sed и cut, зачем сначала менять двоеточия на пробелы, а потом обратно? И самое главное, если используете read, почему сразу не присвоить переменные?
Короче, вопросов гораздо больше чем надо, но если Вас волнует только нестандартная строка, то это решается на этапе считывания файла, удалив строки без данных прогоняя его например через sed
Bash
1
sed '/^ *[0-9]/!d'
или сделав проверку внутри цикла
Bash
1
if [[ "$line" =~ ^\ *[0-9]+ ]]
1
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
06.04.2015, 17:57
Цитата Сообщение от olimpikys Посмотреть сообщение
^M
- это виндузный конец строки. вылечить от него может dos2unix
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
06.04.2015, 18:03  [ТС]
Меня никто не учил, я новичек в bash. Все делал сам. И да, меня волнует не стандартная строка которую нужно привести к виду как и другие строки, а не удалять.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.04.2015, 18:16
Лучший ответ Сообщение было отмечено olimpikys как решение

Решение

Bash
1
grep -o '[0-9]\+ .* dynamic'
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
06.04.2015, 18:24  [ТС]
Цитата Сообщение от Marinero Посмотреть сообщение
grep -o '[0-9]\+ .* dynamic'
Супер, спасибо. То что надо. А можно расшифровать команду, а то я не понимаю что она делает
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.04.2015, 18:55
Лучший ответ Сообщение было отмечено olimpikys как решение

Решение

Вывести только часть строки () удовлетворяющую паттерну: от нескольких(одной и более (\+)) цифр ([0-9]) за котрыми идет <пробел>, потом любое количество (ноль и более (*)) любых символов (.) и заканчивающийся на <пробел>dynamic.

Добавлено через 10 минут
Попробуйте
Bash
1
2
read ip macaddr portn a <<<'980      dc:9f:db:98:43:15    1/g1   dynamic'
printf "%s\n" $ip $macaddr ${macaddr^^} $portn ${portn/1\/g/}
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
06.04.2015, 19:17  [ТС]
Можно еще вопрос? Скрипт перебирает построчно файл, и получает переменные порта который может принимать виды:
g1 - Up_Link port
g2 - Up_Link port
от e1 до e48 - port abonenta
Как написать условие, при котором: если переменная с файла равна от e1 до e48, выполнить - "Порт абонента"
иначе Up_Link?
я сделал так, только тут конкретная переменные g1 которая сравнивается, с остальными. И так же придется сделать для переменной g2, т.е будет 2 условия с одинаковыми командами внутри них, а хоетлось бы одним условием:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
base=/srv/dell-3324/grep-3424.1.log
while read line
do
port=g1
portfail=$(echo $line | cut -d' '  -f3)
newport=$(echo $portfail | sed 's/1\///g')
echo "port= $port"
echo "newport= $newport"
if [ "$port" == "$newport" ]
then
        echo "Eto g1"
else
        echo "Port Abonenta"
fi
done <"$base"
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
06.04.2015, 22:02
Лучший ответ Сообщение было отмечено olimpikys как решение

Решение

А Вы меня так и не поняли…
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
base='/srv/dell-3324/grep-3424.1.log'
while read a b port c
do
    newport=${port/1\//}
    echo "newport= $newport"
    if [[ "$newport" = g[12] ]]
    then
        echo "Up_Link"
    else
        echo "Port Abonenta"
    fi
done <"$base"
Варианты
Bash
1
if [ "$newport" = g1 -o "$newport" = g2 ]
Bash
1
2
3
4
5
case "$newport" in
    g[12]) echo "Up_Link" ;;
    e[1-9]|e[1-4][0-9]) echo "Port Abonenta" ;;
    *) echo "Unknown port" ;;
esac
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
07.04.2015, 11:24  [ТС]
Спасибо огромное. Все понял. if [[ "$newport" = g[12] ]] (Если $newport принимает значение g1 or g2)
if [ "$newport" = g1 -o "$newport" = g2 ] (Если $newport принимает значение g1 or g2, только записано по другому, оператор -o не нашел в описаниях, думаю это (или))
case "$newport" in
g[12]) echo "Up_Link" ;;
e[1-9]|e[1-4][0-9]) echo "Port Abonenta" ;;
*) echo "Unknown port" ;;
esac
понятно все, кроме
e[1-9]|e[1-4][0-9]) echo "Port Abonenta" ;;

e[1-9]| - зачем?
e[0-9] - отвечает за единичную цифру
e[1-4] - отвечает за десятки (т.к максимум 48 портов)
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
07.04.2015, 11:53
«|» обозначает «или» в данном случае. У Вас же может быть е1, е2 ... е9 и в этом случае паттерн e[1-4][0-9] не подойдет.
Цитата Сообщение от man [
оператор «или»
оператор «и»
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
05.05.2015, 18:25  [ТС]
можно еще вопрос?
Есть файл вида
1 c4c9.ec00.385a DYNAMIC epon0/2:6
1 fcfa.f7c5.2994 DYNAMIC epon0/1:9
1 fcfa.f7c5.2985 DYNAMIC epon0/3:2
1 fcfa.f7c5.2810 DYNAMIC epon0/1:11
1 fcfa.f7c5.2d22 DYNAMIC epon0/1:8
471 6470.025b.ab21 DYNAMIC epon0/1:11
1 fcfa.f7c5.294a DYNAMIC epon0/3:1
1 c4c9.ec00.3b98 DYNAMIC epon0/3:8
471 c46e.1fb0.2ab7 DYNAMIC epon0/1:8
471 c860.005f.9bb3 DYNAMIC epon0/1:10
472 c860.0006.dde1 DYNAMIC epon0/2:6
1 fcfa.f7c5.2868 DYNAMIC epon0/2:3
471 0022.b053.1456 DYNAMIC epon0/1:9
1 fcfa.f7c5.28e9 DYNAMIC epon0/1:10
1 fcfa.f7c5.2858 DYNAMIC epon0/2:1
1 fcfa.f7c5.2d1d DYNAMIC epon0/4:2
474 0860.6e7a.2351 DYNAMIC epon0/4:4
1 fcfa.f7c5.2895 DYNAMIC epon0/2:2
1 c4c9.ec00.4198 DYNAMIC epon0/4:7
473 b048.7ac8.25bd DYNAMIC epon0/3:1
471 6466.b311.fb23 DYNAMIC epon0/1:6
474 f81a.6764.c8bf DYNAMIC epon0/4:2
471 c46e.1fe0.eb03 DYNAMIC epon0/1:10
1 fcfa.f7c5.28a6 DYNAMIC epon0/3:3
1 fcfa.f7c5.28a5 DYNAMIC epon0/4:1
1 fcfa.f7c5.2882 DYNAMIC epon0/3:7
1 c4c9.ec00.3911 DYNAMIC epon0/4:6
1 fcfa.f7c5.295c DYNAMIC epon0/1:4
1 fcfa.f7c5.2727 DYNAMIC epon0/4:3
473 f092.1c4f.1589 DYNAMIC epon0/3:2
472 90f6.5262.6109 DYNAMIC epon0/2:7
473 c46e.1fe0.a85b DYNAMIC epon0/3:7
472 c46e.1f43.9e4f DYNAMIC epon0/2:3
1 c4c9.ec00.41b6 DYNAMIC epon0/2:7
474 c46e.1fe0.7af3 DYNAMIC epon0/4:1
1 fcfa.f7c5.28aa DYNAMIC epon0/4:4
471 74d4.3553.4f24 DYNAMIC epon0/1:4
1 fcfa.f7c5.28d0 DYNAMIC epon0/4:5
472 a0f3.c14c.bc47 DYNAMIC epon0/2:2
1 fcfa.f7c5.2928 DYNAMIC epon0/1:6
472 c46e.1fe0.8489 DYNAMIC epon0/2:1
472 3c97.0ed9.f44f DYNAMIC epon0/2:5
471 8434.978d.b365 DYNAMIC epon0/1:10
1 fcfa.f7c5.28a3 DYNAMIC epon0/3:5
1 fcfa.f7c5.2d06 DYNAMIC epon0/2:8
472 c46e.1fe1.0cdb DYNAMIC epon0/2:8
474 f81a.6779.4a1f DYNAMIC epon0/4:3
471 e894.f6cf.1237 DYNAMIC epon0/1:10
473 90f6.526c.6a03 DYNAMIC epon0/3:5
471 f8d1.114c.d739 DYNAMIC epon0/1:10
471 6466.b336.8a3f DYNAMIC epon0/1:10
474 6466.b3e7.2e89 DYNAMIC epon0/4:6
474 00e0.4d72.a3a8 DYNAMIC epon0/4:5
473 0025.22f1.cd6e DYNAMIC epon0/3:3
1 fcfa.f7c5.2938 DYNAMIC epon0/2:5
474 e894.f653.48e1 DYNAMIC epon0/4:7
400 0027.2294.ed2c DYNAMIC epon0/1:10
1 fcfa.f7c5.28b2 DYNAMIC epon0/1:3
471 a0f3.c1f0.e1bf DYNAMIC epon0/1:3
471 c46e.1fe0.ea7f DYNAMIC epon0/1:10
1 fcfa.f7c5.295b DYNAMIC epon0/1:1
471 c46e.1fe1.a595 DYNAMIC epon0/1:2
1 fcfa.f7c5.8c2d DYNAMIC epon0/1:2
Можно ли отсортировать файл таким образом, чтобы если epon0/1:10 встречается более 2х раз, удалить все строки где есть этот epon0/1:10? (epon как видно из файла, может принимать разные значения(номера портов)).
если повторений 2, то оставить эти строки.
0
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
05.05.2015, 18:31  [ТС]
Вот так выглядит файл
Миниатюры
Замена строк в файле  
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
05.05.2015, 19:09
Bash
1
sed -rz '/(epon0\/1:10.*){3,}/s/[^\n]*epon0\/1:10\n//g'
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
05.05.2015, 20:46  [ТС]
но я так понимаю это конкретно к записи epon0/1:10. А номер порта может быть разным.... epon0/1 - 0/4:1-64
т.е с другого оборудование значение может попасться epon0/4:33 или там epon0/2:15
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
05.05.2015, 22:26
Cформулируйте внятно правило, а то ничего непонятно
0
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
06.05.2015, 14:32  [ТС]
нужно отсортировать файл по названию порта, если название порта встречается более 2х раз, удалить все строки с таким названием порта. Порт epon0/1:10 (где 0/1 физический интерфейс, может принимать значение от 0/1 до 0/4. И виртуальный интерфейс 10, может принимать значение от 1 до 64).

Добавлено через 11 часов 43 минуты
Все, спасибо, разобрался.
Но появился новый вопрос.
Мак адреса абонентов я получаю в виде 0025.ab3b.d840
В биллинге этот мак записан как 00:25:ab:3b:d8:40

Как удалить все точки в 0025.ab3b.d840 и потом через каждые 2 символа вставить двоеточие?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
06.05.2015, 15:04
Bash
1
2
json@mbook:~$ echo "0025.ab3b.d840" |sed 's/\.//g;s/.\{2\}/&:/g;s/:$//g'
00:25:ab:3b:d8:40
1
 Аватар для olimpikys
19 / 19 / 1
Регистрация: 03.04.2012
Сообщений: 182
06.05.2015, 18:04  [ТС]
А еще такой вопрос.
Есть файлик содержания
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
iso.3.6.1.2.1.2.2.1.2.1 = STRING: "GigaEthernet0/5"
iso.3.6.1.2.1.2.2.1.2.2 = STRING: "GigaEthernet0/6"
iso.3.6.1.2.1.2.2.1.2.3 = STRING: "GigaEthernet0/4"
iso.3.6.1.2.1.2.2.1.2.4 = STRING: "GigaEthernet0/3"
iso.3.6.1.2.1.2.2.1.2.5 = STRING: "GigaEthernet0/1"
iso.3.6.1.2.1.2.2.1.2.6 = STRING: "GigaEthernet0/2"
iso.3.6.1.2.1.2.2.1.2.7 = STRING: "VLAN400"
iso.3.6.1.2.1.2.2.1.2.8 = STRING: "EPON0/1"
iso.3.6.1.2.1.2.2.1.2.9 = STRING: "EPON0/2"
iso.3.6.1.2.1.2.2.1.2.10 = STRING: "EPON0/3"
iso.3.6.1.2.1.2.2.1.2.11 = STRING: "EPON0/4"
iso.3.6.1.2.1.2.2.1.2.12 = STRING: "EPON0/1:1"
iso.3.6.1.2.1.2.2.1.2.13 = STRING: "EPON0/1:2"
iso.3.6.1.2.1.2.2.1.2.14 = STRING: "EPON0/1:3"
iso.3.6.1.2.1.2.2.1.2.15 = STRING: "EPON0/1:4"
iso.3.6.1.2.1.2.2.1.2.16 = STRING: "EPON0/1:5"
iso.3.6.1.2.1.2.2.1.2.17 = STRING: "EPON0/1:6"
iso.3.6.1.2.1.2.2.1.2.18 = STRING: "EPON0/1:7"
iso.3.6.1.2.1.2.2.1.2.19 = STRING: "EPON0/1:8"
iso.3.6.1.2.1.2.2.1.2.20 = STRING: "EPON0/1:9"
iso.3.6.1.2.1.2.2.1.2.21 = STRING: "EPON0/1:10"
iso.3.6.1.2.1.2.2.1.2.22 = STRING: "EPON0/1:11"
iso.3.6.1.2.1.2.2.1.2.23 = STRING: "EPON0/1:12"
iso.3.6.1.2.1.2.2.1.2.24 = STRING: "EPON0/2:1"
iso.3.6.1.2.1.2.2.1.2.25 = STRING: "EPON0/2:2"
iso.3.6.1.2.1.2.2.1.2.26 = STRING: "EPON0/2:3"
iso.3.6.1.2.1.2.2.1.2.27 = STRING: "EPON0/2:4"
iso.3.6.1.2.1.2.2.1.2.28 = STRING: "EPON0/2:5"
iso.3.6.1.2.1.2.2.1.2.29 = STRING: "EPON0/2:6"
iso.3.6.1.2.1.2.2.1.2.30 = STRING: "EPON0/3:1"
iso.3.6.1.2.1.2.2.1.2.31 = STRING: "EPON0/3:2"
iso.3.6.1.2.1.2.2.1.2.32 = STRING: "EPON0/3:3"
iso.3.6.1.2.1.2.2.1.2.33 = STRING: "EPON0/3:4"
iso.3.6.1.2.1.2.2.1.2.34 = STRING: "EPON0/3:5"
iso.3.6.1.2.1.2.2.1.2.35 = STRING: "EPON0/3:6"
iso.3.6.1.2.1.2.2.1.2.36 = STRING: "EPON0/3:7"
iso.3.6.1.2.1.2.2.1.2.37 = STRING: "EPON0/3:8"
iso.3.6.1.2.1.2.2.1.2.38 = STRING: "EPON0/4:1"
iso.3.6.1.2.1.2.2.1.2.39 = STRING: "EPON0/4:2"
iso.3.6.1.2.1.2.2.1.2.40 = STRING: "EPON0/4:3"
iso.3.6.1.2.1.2.2.1.2.41 = STRING: "EPON0/4:4"
iso.3.6.1.2.1.2.2.1.2.42 = STRING: "EPON0/4:5"
iso.3.6.1.2.1.2.2.1.2.43 = STRING: "EPON0/4:6"
iso.3.6.1.2.1.2.2.1.2.44 = STRING: "EPON0/2:7"
iso.3.6.1.2.1.2.2.1.2.45 = STRING: "EPON0/4:7"
iso.3.6.1.2.1.2.2.1.2.46 = STRING: "EPON0/2:8"
iso.3.6.1.2.1.2.2.1.2.47 = STRING: "EPON0/3:9"
iso.3.6.1.2.1.2.2.1.2.48 = STRING: "EPON0/3:10"
iso.3.6.1.2.1.2.2.1.2.49 = STRING: "EPON0/3:11"
iso.3.6.1.2.1.2.2.1.2.50 = STRING: "EPON0/3:12"
iso.3.6.1.2.1.2.2.1.2.51 = STRING: "EPON0/3:13"
iso.3.6.1.2.1.2.2.1.2.52 = STRING: "EPON0/3:14"
iso.3.6.1.2.1.2.2.1.2.53 = STRING: "EPON0/4:8"
есть скрипт в переменной которого хранится название порта. EPON0/3:1

Могу ли я в соответствии этой переменной получить соответствующую строку
iso.3.6.1.2.1.2.2.1.2.30 = STRING: "EPON0/3:1"
А еще лучше если получить последнюю цифру после iso.3.6.1.2.1.2.2.1.2. т.е цифру 30
Нумерация строк в файле отсутствует, это тут она появилась
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
06.05.2015, 20:07
Bash
1
2
3
4
echo $a
EPON0/3:1
cat snmp_output.txt | grep -Poh "\d+\s(?=.*$a\b)"
30
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.05.2015, 20:07
Помогаю со студенческими работами здесь

Замена слов в файле, используя утилиту - sed
Есть необходимость менять слова в файлах Утилита sed позволяет это сделать так sed s/ОБРАЗЕЦ/ЗАМЕНА/ Вот сценарий ...

Замена слова в одном файле строкой из другого файла
Здравствуйте Уважаемые Форумчане. Извиняюсь,если чтото подобное уже было, но я не нашел ответа. Вопрос в следующем: Есть файл...

Получение значения по URL и замена определенного текста в файле командой по SHH
Получение значения по URL и замена определенного текста в файле командой по SHH Мне необходимо заменить определенный текст по SHH с...

Количество строк в файле
Всем доброго времени суток! Необходимо выполнить следующее задание: Для каталогов заданных паpаметpами, вычислить и выдать количество...

Пропуск чтения пустых строк в файле
Здравствуйте форумчане! Использую read cd &lt; /dev/ttyAMA0 для чтения порта uart. Но устройство подключенное к этому порту выбрасывает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru