The OpenNET Project / Index page

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



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

"sed удалить первое вхождение строки"  +/
Сообщение от Алёша Головин (?), 15-Авг-24, 12:49 
Здравствуйте подскажите пожалуйста по sed
мануал курил, но похожего не нашел

Нужно удалять каждую первую строку, начинающююся на "#", если подряд идут две или более строк начинающихся на "#".

дано:
cat test.txt
#text1
text2
#text3
#text4

нужно:

#text1
text2
#text4

Я сделал на питоне, но приходится тащить его отдельно, что нехорошо. Думается с помощью sed это будет проще и быстрее, если конечно знать как.
Спасибо

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

Оглавление

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


1. "sed удалить первое вхождение строки"  +/
Сообщение от Аноним (1), 15-Авг-24, 19:15 
зачем sed, когда ты его будешь вызывать из баш, а на баше такое реализуется без стартования дочерних процессов, по человечески, понадобится только обычный советский... [читать далее >>]

...цикл по строкам.

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

2. "sed удалить первое вхождение строки"  +/
Сообщение от Pahanivo (ok), 16-Авг-24, 18:19 
На sed можно оперировать по многостроку, через буфера. Но там синтаксис наркомания чистой воды.
ИМХО вообще тут самое место perl regex.

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

3. "sed удалить первое вхождение строки"  +1 +/
Сообщение от Аноним (3), 17-Авг-24, 03:54 
awk 'BEGIN {ORS=""}; {prev=str; str=$0; str ~ /^#/ ? has=1:has=0; prev ~ /^#/ ? had=1:had=0; if (had && has && !del) del=1; else {print prev; ORS="\n"}; if (!has) del=0}; END {if (del || !had || !has) print str}'  test.txt
Ответить | Правка | Наверх | Cообщить модератору

4. "sed удалить первое вхождение строки"  +/
Сообщение от Pahanivo пробегал (?), 22-Авг-24, 23:12 
>  awk 'BEGIN {ORS=""}; {prev=str; str=$0; str ~ /^#/ ? has=1:has=0; prev
> ~ /^#/ ? had=1:had=0; if (had && has && !del) del=1;
> else {print prev; ORS="\n"}; if (!has) del=0}; END {if (del ||
> !had || !has) print str}'  test.txt

но вот тут по сравнению с sed таблетки не такие жоссские .... можно понять

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

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

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




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

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