The OpenNET Project / Index page

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

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

"Вопрос по sed"  
Сообщение от Аноним (??) on 23-Окт-08, 16:24 
Как с помощью sed заменить первую строку, совпадающую с паттерном, последней, совпадающей с паттерном? И наоборот.

Т.е., есть например, файл:

...
some_var="foo"
...
some_var="bar"
...

Паттерн для строки /^some_var=/. Нужно, понятно, заменить в первом случае foo на bar, во втором - наоборот.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

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


1. "Вопрос по sed"  
Сообщение от phpcoder email(??) on 24-Окт-08, 09:55 
[...]
>Паттерн для строки /^some_var=/. Нужно, понятно, заменить в первом случае foo на
>bar, во втором - наоборот.

Я бы, скорее на awk сделал, потому что на sed, может и можно, но как-то сходу не придумывается. А на awk, вот:

[c0der@rock ~]$ cat test.txt
some_var="foo"
some_var="test"
some_var="bar"
[c0der@rock ~]$ awk 'BEGIN{first=0;last=0}{arr[NR]=$0;if(/^some_var=/){if(first==0){first=NR};last=NR}}END{for(i=1; i<=length(arr);i++){if(first==i&&first!=last){print arr[last]}else{if(last==i&&first!=last){print arr[first]}else{print arr[i]}}}}' test.txt
some_var="bar"
some_var="test"
some_var="foo"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Вопрос по sed"  
Сообщение от Аноним (??) on 24-Окт-08, 14:20 
>>Паттерн для строки /^some_var=/. Нужно, понятно, заменить в первом случае foo на
>>bar, во втором - наоборот.

В смысле, нужно не поменять местами, а заменить либо последний матч на первый, либо наоборот.

>Я бы, скорее на awk сделал, потому что на sed, может и
>можно, но как-то сходу не придумывается.

Мне нужно именно на sed, для ${REINPLACE_CMD} во FreeBSD'шном порте. Патч не подходит, работать нужно с динамически сгенеренным файлом. Если гуру sed ничего не подскажут, я лучше несколькими командами сделаю, это хотя бы можно будет прочитать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Вопрос по sed"  
Сообщение от Slim (??) on 24-Окт-08, 19:10 
Не знаю, что такое REINPLACE_CMD, но имхо sed тут не в тему. Заменить первым матчем все последующие можно, используя hold buffer - синтаксиса уже не помню, тут есть хорошая дока: http://www.grymoire.com/Unix/Sed.html. Но выделить последний матч и заменить только его, а тем более заменить им все предедущие, ИМХО нельзя. Все-таки _stream_ editor.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Препод сказал на sed-е, значит на сед-е"  
Сообщение от Andrey Mitrofanov on 24-Окт-08, 11:09 
>Как с помощью sed заменить первую строку, совпадающую с паттерном, последней, совпадающей
>с паттерном? И наоборот.

Преподы просто озверели!! %-)) Поди без шела и textutils?!

>Паттерн для строки /^some_var=/.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Препод сказал на sed-е, значит на сед-е"  
Сообщение от Аноним (??) on 24-Окт-08, 14:22 
>>Как с помощью sed заменить первую строку, совпадающую с паттерном, последней, совпадающей
>>с паттерном? И наоборот.
>Преподы просто озверели!! %-)) Поди без шела и textutils?!

Да вообще ужас. Иди вон в тему "Как связать v-480 и storedge 3320 (Аппаратура, Железо/Solaris)" в "виртуальной конференции" и там еще про преподов спроси...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Вопрос по sed"  
Сообщение от Keeper email(??) on 26-Окт-08, 12:47 
Только если использовать grep для вычисления номеров нужных строк, и shell, для последующей подстановки вычисленных номеров строк в команды sed.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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