The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"SED бработка нескольких строк"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Разное / Linux)
Изначальное сообщение [ Отслеживать ]

"SED бработка нескольких строк"  +/
Сообщение от say (??) on 28-Янв-13, 14:28 
Добрый день!

Есть файл вида:

1 aaa
2 bbb
3
4 [test.1]
5 host = 192.168.0.1
6 [test.2]
7 host = 192.168.0.2

Необходимо удалить перенос строки после [test.x]

Что я делаю:

sed ':a; N; /\[test\./s/\].*\n//g ; ta;' test.conf

Вывод (не удаляется перенос после [test.1]):
1 aaa
2 bbb
3
4 [test.1]
5 host = 192.168.0.1
6 [test.2 7 host = 192.168.0.2

Если в исходном файле добавить дополнительный перенос строки:

1 aaa
2 bbb
3
4
5 [test.1]
6 host = 192.168.0.1
7 [test.2]
8 host = 192.168.0.2

То вывод правильный:

1 aaa
2 bbb
3
4
5 [test.1 6 host = 192.168.0.1
7 [test.2 8 host = 192.168.0.2

Собственно вопрос почему не срабатывает удаление переноса из первого файла.

Если есть гуру SED'а, то можно ли сделать из строк:

1 [test.1]
2 host = 192.168.0.1
3 [test.2]
4 host = 192.168.0.2

сделать (цифры 1 и 2 брать из [test.х], могут быть не по порядку):
1 192.168.0.1
2 192.168.0.2

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "SED бработка нескольких строк"  +/
Сообщение от McLeod095 (??) on 28-Янв-13, 14:53 
>[оверквотинг удален]
> Собственно вопрос почему не срабатывает удаление переноса из первого файла.
> Если есть гуру SED'а, то можно ли сделать из строк:
>
1 [test.1] 
> 2 host = 192.168.0.1
> 3 [test.2]
> 4 host = 192.168.0.2

> сделать (цифры 1 и 2 брать из [test.х], могут быть не по
> порядку):
>
1 192.168.0.1 
> 2 192.168.0.2

На fedora 17 x64 вообще ничего не происходит

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "SED бработка нескольких строк"  +/
Сообщение от McLeod095 (??) on 28-Янв-13, 15:12 
>[оверквотинг удален]
> Собственно вопрос почему не срабатывает удаление переноса из первого файла.
> Если есть гуру SED'а, то можно ли сделать из строк:
>
1 [test.1] 
> 2 host = 192.168.0.1
> 3 [test.2]
> 4 host = 192.168.0.2

> сделать (цифры 1 и 2 брать из [test.х], могут быть не по
> порядку):
>
1 192.168.0.1 
> 2 192.168.0.2

вот так у меня заработало


sed -e :a -e '/\]$/N; s/\]\n/ /; ta' test.,conf

а вот вывод


aaa
bbb

[test.1 host = 192.168.0.1
[test.2 host = 192.168.0.2


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "SED бработка нескольких строк"  +/
Сообщение от say (??) on 28-Янв-13, 15:23 
>[оверквотинг удален]
>
 
> sed -e :a -e '/\]$/N; s/\]\n/ /; ta' test.,conf
>

> а вот вывод
>
 
> aaa
> bbb
> [test.1 host = 192.168.0.1
> [test.2 host = 192.168.0.2
>

Спасибо '/\]$/N' надо было, а у меня с 1й строки начинал обрабатывать 2 строки.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "SED бработка нескольких строк"  +/
Сообщение от McLeod095 (??) on 28-Янв-13, 15:47 
>[оверквотинг удален]
>>
>> а вот вывод
>>
 
>> aaa
>> bbb
>> [test.1 host = 192.168.0.1
>> [test.2 host = 192.168.0.2
>>

> Спасибо '/\]$/N' надо было, а у меня с 1й строки начинал обрабатывать
> 2 строки.

Я правда сам впервеы увидел эти конструкции. и в очередной раз поразился мощи sed
кстати вот что получилось


sed -e :a -e '/\]$/N; s/\[test\.\([0-9]\)\]\n/\1/; ta; s/host//g' test.a

ну и результат

aaa
bbb

1 = 192.168.0.1
2 = 192.168.0.2


Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "SED бработка нескольких строк"  +/
Сообщение от say (??) on 28-Янв-13, 15:50 
>
 
> sed -e :a -e '/\]$/N; s/\[test\.\([0-9]\)\]\n/\1/; ta; s/host//g' test.a
>

> ну и результат
>
 
> aaa
> bbb
> 1 = 192.168.0.1
> 2 = 192.168.0.2
>

Спасибо большое - то, что надо:)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "SED бработка нескольких строк"  +/
Сообщение от педант on 28-Янв-13, 17:05 
если конкретно задан файл типа
1 aaa
2 bbb
3
4 [test.1]
5 host = 192.168.0.1
6 [test.2]
7 host = 192.168.0.2

то
sed -e :a -e '/\]$/N; s/[0-9] \[test\.\([0-9]\)\]\n/\1/; s/[0-9] host =//; /\.[0-9]$/\!d; ta' test.conf

но это формализм =)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру