LINUX.ORG.RU

Сообщения Gr0mazeka

 

sed в цикле.

Форум — General

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

Есть файл


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
()

RSS подписка на новые темы