2010-12-10 2 views
-1

Я пытаюсь заменить определенные функции с помощью SED. Пусть у меня есть некоторая функция с именем,замена строки с использованием SED

AAAABBBB()

и мне нужно, чтобы изменить это в

КЦИК (nBBBB)

% BBBB < - это может быть любой legnth, но AAAA, CCCC, n - фиксированная длина.

Как я могу это сделать, используя SED? или даже с использованием другого метода?

Благодаря

+2

Я не понимаю, что вы хотите точно заменить. Можете привести несколько примеров? – 2010-12-10 02:50:08

ответ

2

Вот быстрый один:

echo "AAAABBBB()" | sed -e 's/AAAA\(.\+\)()/CCCC(n\1)/' 
CCCC(nBBBB) 

echo "AAAAFF()" | sed -e 's/AAAA\(.\+\)()/CCCC(n\1)/' 
CCCC(nFF) 

Идея довольно проста: матч строку АААА, захватите Б в обратной ссылки (1 или более из них) , Теперь замените это на пару C и backref. То же самое касается другой буквы.

Вам, кстати, по каким-то конкретным примерам лучше. В противном случае мы могли бы не ударить точно вправо на замену, которую вы хотите.

0
sed -r 's/^A+([^A]+)\(\)/CCCC(n\1)/' 
+0

извините, я забыл объяснить B может быть любой буквой, а .. – Todd 2010-12-10 02:53:22

+0

так может быть AAAAFWEF() или AAAAWGRSFWEF() или даже AAAAEGRERGREGREGSADFE() и т.д. – Todd 2010-12-10 02:54:34

0

Вы не дают достаточно информации, чтобы сделать очень выборочный образец (предполагая, что есть функции, которые вы сделать не хотите переименовать), но если вы хотите переименовать все так:

sed -e 's/^\(....\)\(.*\)()/\1(n\2)/' 

Это поворачивает 4 символа в начале строки (AAAA), за которой следует любая длина BBBB в AAAA (nBBBB). Я не уверен, откуда вы собираетесь получать CCCC?

Смежные вопросы