Есть файл some.txt с блоками текста которые разделены пробелами Пример: Задача: Если в блоке(блок: от пустой строки до пустой строки) текста есть подстрока 'value' то найти и считать значение test которое находиться в первой строке и записать его в файл res.txt и.т.д для всех блоков в файле.
хорошая задачка)) для прокачки очень важного админского скила итак, дано: txt.txt Code: 111111test 1111value 1111111111 1111111111 222222test 2222222222 22222value 2222222222 333333test 2222222222 2222222222 222222222 444444test 2222222222 22222value 2222222222 решение: Code: taha@esx5:~$ cat txt.txt | sed -nre '1h;/^$/!{ba;};N;h;:a;/^.*value$/{g;p;}' 111111test 222222test 444444test
Не сочтите за наглость) Подскажите как тут лучше сделать, нужно взять строку из файла result.txt найти ее в файле base.txt и записать данные которые расположены после ";" (после ; могут быть как буквы так и цифры разного регистра) из этой строки в файл finish.txt Вот как я пробую это сделать. но что то не разобрался с циклам for в bash. Файл result.txt содержит ip адреса. Пример Файла: Файл base.txt содержит записи вида: Пример файла:
Навскидку Code: [taha@LenovoS10 ~]$ cat results.txt 1.1.1.1 11.11.11.11 22.22.22.22 99.12.122.129 196.196.196.196 [taha@LenovoS10 ~]$ cat base.txt 2.2.2.2;blabla 11.11.11.11;TeSt_Some2_inFo 3.3.3.3;blabla 4.4.4.4;blabla 99.12.122.129;Some2_inFo55 5.5.5.5;blabla [taha@LenovoS10 ~]$ cat results.txt | while read line; do sed -rne "s/$line;(.*)/\1/p" base.txt >> finish.txt; done [taha@LenovoS10 ~]$ cat finish.txt TeSt_Some2_inFo Some2_inFo55
если уж отработало: Code: cat txt.txt | sed -nre '1h;/^$/!{ba;};N;h;:a;/^.*value$/{g;p;}' то Code: cat results.txt | while read line; do sed -rne "s/$line;(.*)/\1/p" base.txt >> finish.txt; done уж точно должно... 1. также можешь попробовать без перенаправления в finish.txt (все совпадения попрут на консоль) 2. можешь посмотреть, отрабатывает ли регулярка и как (я не брал в расчёт, что вначале будет что-то кроме ip; ) sed -ne "/$line;.*/p" base.txt cat base.txt | sed -ne "/$line;.*/p" ЗЫ: команду и вывод в студию может не в седе проблемы, а в чём-то другом PS2: Code: taha@esx5:~$ bash -x ./sh.sh Отладка скриптов Bash