Добрый день!Есть файл вида:
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'а, то можно ли сделать из строк:
>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'а, то можно ли сделать из строк:
>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 -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 1 = 192.168.0.1
кстати вот что получилось
sed -e :a -e '/\]$/N; s/\[test\.\([0-9]\)\]\n/\1/; ta; s/host//g' test.a
ну и результат
aaa
bbb
2 = 192.168.0.2
>
> 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
>Спасибо большое - то, что надо:)
если конкретно задан файл типа
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но это формализм =)