LINUX.ORG.RU

Сообщения Gr0mazeka

 

sed в цикле.

Может кто подскажет, третий день бьюсь.

Есть файл


AAAABBBBCCC DDDD TTTTT
SSSSAAAABBBBBTTTTTAAAAA
QQQQQ
RRRRR
RRRRR
YYYYY

GGGGGGTTTTTOOOOOLLLLLL
SRRRRRRGGGGG
RRRRR
RRRRR
RRRRR
RRRRR
TTTTT

AAAABBBBBCCCCCDDDDTTTTT
SSSSBBBBAAAAATTTTTAAAAAA
TTTTT

Файл - большой текстовый файл разбитый на блоки. Разделитель между блоками - пробел. Задача: поменять в каждом блоке во второй строке pattern1 на pattern2. В примере пусть это будет TTTTT на 11111. Проблемы: - величина каждого блока может быть разной и pattern1 может вообще отсутствовать. - pattern1 в других строках должен остаться без изменений. Может еще какие-то вопросы по условию не осветил.

Вот что накалякал я.

#!/bin/bash
for i in $(cat test1 | sed -n '/^$/ =')
#Получаем список i. Где i - номер пустой строки.

do i=$[$i+2]
#делаем смещение на 2 строки вниз

echo $i >>tests
#для удобства сохряняю номера всех строк, где должен быть pattern1, хотя его может и не быть.

#cat test1 | sed -e «„${i}“ s/TTTTT/1111/»
#1-й вариант - в каждой строке с номером i провести замену. Команда выполняется столько раз, сколько пустых строк есть в файле. При этом вывод результатов - это повторение исходного файла * на количество пустых строк, что неприемлемо.

cat test1 | sed -e «„${i}“ s/TTTTT/1111/w test1»
#2-й вариант По идее делает тоже самое, что и в первом случае, но результат обработки каждого i должен накладываться на уже существующий. То есть произошла замена - измененный файл заменил оригинал. Реально виден только результат обработки первого i. И к тому же вообще не понятно почему в конце файла вставляется вся измененная строка.

#cat test1 | sed -e «„${i}“ s/TTTTT/11111/» >test1
#3-й вариант, как я понимаю - аналог 2-го. То есть результат обработки i должен записываться в исходный файл. А действительности файл test1 получается пустой.

done

Мои чайниковские мозги подсказывают, что, вероятно, проблема с открытием и закрытием файла test1. Но как через баш заставлять закрываться измененный файл test1? Или есть другие, более пододящие для таких целей инструменты, кроме sed?

Заранее спасибо!

Gr0mazeka
()