Может кто подскажет, третий день бьюсь.
Есть файл
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?
Заранее спасибо!