URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 94307
[ Назад ]

Исходное сообщение
"SED бработка нескольких строк"

Отправлено say , 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


Содержание

Сообщения в этом обсуждении
"SED бработка нескольких строк"
Отправлено McLeod095 , 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 вообще ничего не происходит


"SED бработка нескольких строк"
Отправлено McLeod095 , 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



"SED бработка нескольких строк"
Отправлено say , 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 строки.


"SED бработка нескольких строк"
Отправлено McLeod095 , 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



"SED бработка нескольких строк"
Отправлено say , 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
>

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


"SED бработка нескольких строк"
Отправлено педант , 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

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