пятница, 23 октября 2009 г.

Замена с помощью Sed

Встала передо мной следующая задача - в текстовом файле в строчках, начинающихся на определенный набор символов заменить некоторое слово на другое. Причем если искомое слово встречается в строчке второй раз, то заменить его на третье слово. Со всеми последующими повторами ничего не делать. Вот пример (придумал его только что, естественно в боевой задаче содержимое другое):
@Test Некое предложение, в котором возможно появление определенного слова, причем, возможно, два раза.

Нужно найти эту строчку по "@Test", первое "возможно" заменить на одно слово, второе "возможно" заменить на другое, чтобы получилось так:
@Test Некое предложение, в котором АААА появление определенного слова, причем, ББББ, два раза.

Начал писать программу на perl, однако все оказалось проще:
sed '/^@Test/s/возможно/АААА/;/^@Test/s/возможно/ББББ/;'

На самом деле сигнальных слов, с которых начинается строчка, несколько. И производить замену нужно в нескольких строчках:
sed '/^@[Test|String|Char|Long]/s/возможно/АААА/;/^@[Test|String|Char|Long]/s/возможно/ББББ/;'

Комментариев нет:

Отправить комментарий