Удаление строк из файла

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

Модераторы: /dev/random, Модераторы разделов

djo
Сообщения: 18
ОС: Debian

Удаление строк из файла

Сообщение djo »

Есть файл вида:
* Name : TDK_Torg002
LastMsg : 0
ToHost :
Addr->IP : 83.111.42.123 Port 5061
Defaddr->IP : 0.0.0.0 Port 5060
Useragent : MP202 B 2FXS/3.0.0_build_13
Reg. Contact : sip:TDK_Torg002@192.168.2.26:5061

и т.д всего около 40000 строк. Как можно удалить все, кроме строк, которые содержат *Name :, CallerID и Addr->IP во всех записях, и чтобы они форматировались в вид *Name : .... Callerid: ..... Addr->IP: ...........
Спасибо сказали:
djo
Сообщения: 18
ОС: Debian

Re: Удаление строк из файла

Сообщение djo »

И так!

Вот что получилось:

awk -F: '/* Name/ {print $1,$2} /Callerid/ {print $1,$2} /Addr->IP/ {print $1,$2}' file > newfile

Теперь имеется вот такой вот вид файла:

Name SibTerra03
Callerid "8xxxxx5" <83xxxxx65>
Addr->IP 217.74.169.120
Name SibTerra02
Callerid "83xxxx2" <83xxxxx92>
Addr->IP 217.74.169.120
Name SibTerra01
Callerid "8xxxxx3" <8xxxxxx3>
Addr->IP 217.74.169.120

и т.д.
Как можно сделать, чтобы каждые первые три строки файла формировались в одну через пробел?
Спасибо сказали:
djo
Сообщения: 18
ОС: Debian

Re: Удаление строк из файла

Сообщение djo »

Все разобрался, только теперь я сделал так, разбил на блоки.

sed 'n;n;G;' newfile > newfile2 , получается так

* Name krastsavs103
Callerid "83910000303" <83910000303>
Addr->IP 217.117.177.129 Port 33288

* Name krastsavs102
Callerid "83910000302" <83910000302>
Addr->IP (Unspecified) Port 0

а теперь мне нужно было осуществить поиск по выражению, и если оно совпадает с ip адресом, то печатать целый блок. Это делается с помощью этого скрипта.

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

#!/bin/bash
list=/home/skynet/file
ip="217.117.177 здесь много адресов сети около 300 штук через пробел"
for ipaddr in $ip
do
sed -e '/./{H;$!d;}' -e 'x;/'$ipaddr'/!d;' $list
done
Спасибо сказали:
djo
Сообщения: 18
ОС: Debian

Re: Удаление строк из файла

Сообщение djo »

Помогите мне пожалуйста.
Как сделать чтобы вот такой вот текст:

terneftegaz001
"8xxxx745435"
83.145.147.205
sibcet07
"8xxxx050588"
83.135.159.186
sibcet06
"8xxxx050577"
83.115.159.186
.....
.....
.....

стал таким

terneftegaz001, "8xxxx745435", 83.145.147.205
sibcet07, "8xxxx050588", 83.135.159.186
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Удаление строк из файла

Сообщение allez »

...

$ cat file terneftegaz001 "8xxxx745435" 83.145.147.205 sibcet07 "8xxxx050588" 83.135.159.186 sibcet06 "8xxxx050577" 83.115.159.186 $ sed 's/^[A-Za-z]/\^&/' file | tr "\n" "$" | sed 's/\(\$\^\|\$$\)/\n/g; s/^\^//; s/\$/, /g' terneftegaz001, "8xxxx745435", 83.145.147.205 sibcet07, "8xxxx050588", 83.135.159.186 sibcet06, "8xxxx050577", 83.115.159.186


Прошу прощения, djo, вы случаем не в "Мобилоне" работаете? :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Удаление строк из файла

Сообщение drBatty »

djo
ппц

$

$ echo "terneftegaz001 "8xxxx745435" 83.145.147.205 sibcet07 "8xxxx050588" 83.135.159.186 sibcet06 "8xxxx050577" 83.115.159.186 ..... ..... ....." | sed 'N;N;s/\n/ /g' terneftegaz001 8xxxx745435 83.145.147.205 sibcet07 8xxxx050588 83.135.159.186 sibcet06 8xxxx050577 83.115.159.186 ..... ..... .....



allez писал(а):
10.12.2012 08:07
sed 's/^[A-Za-z]/\^&/' file | tr "\n" "$" | sed 's/\(\$\^\|\$$\)/\n/g; s/^\^//; s/\$/, /g'

а вы в контрразведке. Карты для врагов делаете.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: