The OpenNET Project / Index page

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

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

"Удаление части строки до определённого слова с помощью sed"  
Сообщение от nastr email(??) on 12-Дек-08, 14:06 
Мне нужно написать простенький скрипт на shell.
Скрипт должен из семи файлов *"+%m%d%H%M"`\.txt выбрать все строчки со словами error#, удалил повторяющиеся строки

grep error# *"+%m%d%H%M"`\.txt | sort | uniq > temp

Теперь нежно удалить часть строки до слова error# во всех строках файла и опять же отсортировать и удалить повторяющиеся строки.
В редакторе vi это делается при помощи следующей последовательности команд:
vi temp
/error#
d^
:wq!
Но мне нужно автоматизировать этот процесс, для этого я решил использовать sed.
Почитал "Маленький учебник по Sed и Awk" (http://www.opennet.ru/docs/RUS/bash_scripting_guide/a14586.html)
Но не нашел того что мне нужно.

sed 's/error#//g' < temp |sort| uniq >temp2 - Удалить все найденные "error#", оставляя остальную часть строки без изменений, во всех строках где встречается "error#"

А мне нужно удалить часть строки до слова "error# " во всех строках файла, оставив остальную часть строки без изменений.
Подскажите пожалуйста как это сделать. Спасибо.

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

 Оглавление

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


1. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от phpcoder email(??) on 12-Дек-08, 14:15 
>sed 's/error#//g' < temp |sort| uniq >temp2 - Удалить все найденные "error#", оставляя остальную часть строки без изменений, во всех строках где встречается "error#"
>
>А мне нужно удалить часть строки до слова "error# " во всех
>строках файла, оставив остальную часть строки без изменений.

sed 's/.*error#\(.*\)$/\1/g' < temp |sort -u >temp2

Вот так попробуйте.

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

2. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от nastr email(??) on 12-Дек-08, 15:03 
Спасибо большое, так заработало!
есть ещё маленький вопросик:

grep error# *12120846.txt > temp1 # из 7 файлов с окончанием в название 12120846.txt все строки содержащие error# складываются в temp1
sed 's/.*error#:\(.*\)$/\1/g' < temp1 | sort | uniq > temp2 # из temp1 во всех строках удаляются все символы до "error#:" включительно

# есть строки с одинаковым номером ошибки, но с разными описаниями. Пример:
904,105,000 >SXFW ,OTHER_ERROR:"error during saving archivelogs of cx1_1"<"
904,105,000 >SXFW ,OTHER_ERROR:"error during saving archivelogs of sxlog_1"<"
904,105,001 >SXFW ,OTHER_ERROR:""<"
904,105,001 >SXFW ,OTHER_ERROR:"java.lang.String"<"
904,105,001 >SXFW ,OTHER_ERROR:"output buffer too short"<"
904,108,005 >SXFW ,OTHER_ERROR:no transaction active<"
904,108,005 >SXFW ,OTHER_ERROR:no transaction active<",send to client)
# как сделать что бы между разными ошибками вставлялась пустая строка? Пример:
904,105,000 >SXFW ,OTHER_ERROR:"error during saving archivelogs of cx1_1"<"
904,105,000 >SXFW ,OTHER_ERROR:"error during saving archivelogs of sxlog_1"<"

904,105,001 >SXFW ,OTHER_ERROR:""<"
904,105,001 >SXFW ,OTHER_ERROR:"java.lang.String"<"
904,105,001 >SXFW ,OTHER_ERROR:"output buffer too short"<"

904,108,005 >SXFW ,OTHER_ERROR:no transaction active<"
904,108,005 >SXFW ,OTHER_ERROR:no transaction active<",send to client)

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

3. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от nastr email(??) on 12-Дек-08, 16:19 
>
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от nastr email(??) on 12-Дек-08, 16:20 
Можно было бы следующим образом:
grep error# *12120846.txt | sed 's/.*error#:\(.*\)$/\1/g' | sort | uniq > file1
egrep -o "([0-9]{3},){2},[0-9]{3} " file1 | awk '{print $1}' | sort | uniq > file2
for l in `cat file2` ; do
egrep $l file1 >>file3
echo >>file3
done

Но у меня OС: SunOS 5.8 Generic_117350-08 sun4us sparc FJSV,GPUSC-M
ключа "-о" у egrep нет (grep тоже):(:(
# egrep -o "([0-9]{3},){2},[0-9]{3} " file1
egrep: illegal option -- o
usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...

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

5. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от angra (ok) on 16-Дек-08, 13:58 
Вот когда начинается выстраивание таких конструкций и проблемы с версиями основных утилит, то самое время перейти к perl
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Удаление части строки до полного катарсиса $*)"  
Сообщение от Andrey Mitrofanov on 16-Дек-08, 14:27 
>Вот когда начинается выстраивание таких конструкций и проблемы с версиями основных утилит,
>то самое время

А может, - поставить GNU grep, GNU find, GNU sed, GNU $...далее_по_списку? :))

В процессе поиска каждой из них, внимательно %) думать - какого, собственно!, в конкретной ОС стоят какие-то ублюдки вместо?... Обдумать вопрос выбора "ОС" в свете "новых обстоятельств"? Обдумать выбор религии в свете несовместимости grep-а? ... Да, очём это я??

>перейти к perl

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

8. "Удаление части строки до полного катарсиса $*)"  
Сообщение от vic (??) on 16-Дек-08, 15:23 
>[оверквотинг удален]
>
>А может, - поставить GNU grep, GNU find, GNU sed, GNU $...далее_по_списку?
>:))
>
>В процессе поиска каждой из них, внимательно %) думать - какого, собственно!,
>в конкретной ОС стоят какие-то ублюдки вместо?... Обдумать вопрос выбора "ОС"
>в свете "новых обстоятельств"? Обдумать выбор религии в свете несовместимости grep-а?
>... Да, очём это я??
>
>>перейти к perl

есть стандартные и расширенные утилиты.. ах да, зачастую ставить GNU .* утилиты и не надо, уже стоят, поискать просто надо в экзотических путях :)
ну для переносимости ориентироваться на консервативные стандартные.. это понятно

зы: однако для не элементарной обработки текста лучше использовать предназначенный и заточенный для этого инструмент: perl, бензопила дружба, бита :)

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

9. "___до полного катарсиса $*) гы"  
Сообщение от Andrey Mitrofanov on 16-Дек-08, 18:56 
>есть стандартные и расширенные утилиты.. ах да, зачастую ставить GNU .* утилиты
>и не надо, уже стоят, поискать просто надо в экзотических путях
>:)
>ну для переносимости ориентироваться на консервативные стандартные.. это понятно

Ага, :) а О-о-опыт и П-п-профессионализм есть багаж бИсценных Ззззнаний о [не]совместимости и разнообразии мест расположения и имён бинарников в Настоящих-Сертифицированных Ппозихс-Юнихсах... И веско вставленное в беседе о Возвышенном "это не переносимо", или "не делай так! это башизм", или "замени в файле $X все $Y на $Z -- тогда... О!!! ...соберётся" -- вызывает благоговейные взгляды непросветлённых нюбов. И Мудный Учитель уже готов поведать им путь к wget заветному ftp символу freebsd единения org с Мировым чего-то там на зеркалах .iso Разумом.

ЗЫЖ эк его пр{о,и}било---

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

10. "___до полного катарсиса $*) гы"  
Сообщение от vic (??) on 16-Дек-08, 20:08 
слыш шышки есть исчо? =)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Удаление части строки до определённого слова с помощью sed"  
Сообщение от vic (??) on 16-Дек-08, 15:14 
>Спасибо большое, так заработало!
>есть ещё маленький вопросик:
>
>grep error# *12120846.txt > temp1 # из 7 файлов с окончанием в название 12120846.txt все строки содержащие error# складываются в temp1
>sed 's/.*error#:\(.*\)$/\1/g' < temp1 | sort | uniq > temp2 # из temp1 во всех строках удаляются все символы до "error#:" включительно

grep error# *12120846.txt | sed 's/.*error#:\(.*\)$/\1/g' | sort | uniq | \
awk 'BEGIN {i = ""} { if (i != $1) { if (i != "") printf("\n"); i = $1; } print $0 }'

изгаляться можно как угодно :)

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

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

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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