Различные замены для разных моделей в седе - PullRequest
0 голосов
/ 06 сентября 2011

Мне нужно заменить два шаблона в каждой строке файла. Допустим, например, что файл содержит следующее:

pattern1 a1 b1 c1
pattern2 a2 b2 c2
pattern1 a1 b1 c1

По сути, везде, где появляется «pattern1», a1 необходимо заменить на a2 и b1 для b2 и так далее. Однако я также хочу изменить pattern1 в pattern2.

Пока у меня есть кое-что близкое:

/pattern1/ s/a1 b1 c1/a2 b2 c2/

Обратите внимание, я хочу сохранить весь скрипт sed в одном файле.

UPDATE Желаемый вывод, это может быть не лучший пример, я отвечу на любые вопросы.

pattern2 a2 b2 c2
pattern2 a2 b2 c2
pattern2 a2 b2 c2

1 Ответ

2 голосов
/ 06 сентября 2011

Существуют различные способы сделать это.

sed -e '/pattern1/{
        s/a2/a1/
        s/b2/b1/
        s/c2/c1/
        s/pattern1/pattern2/
        }' "$@"

Вы можете часто свернуть это в одну строку, используя точки с запятой вместо новых строк (но некоторые версии sed суетливее об этомчем другие).-e не является строго необходимым в этом контексте.

Из вопроса о том, следует ли заменить «a1» на «a2» или наоборот, не совсем ясно;этот код работает с формулировкой «a1 необходимо заменить на a2» (что означает «заменить вхождения a2 на a1»), но в примере предлагается противоположная замена.Если требуется другое значение, используйте строки типа s/a1/a2/ вместо s/a2/a1/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...