Как "перевернуть-заменить" строки в файле с помощью сценариев оболочки - PullRequest
1 голос
/ 26 июля 2010

Я столкнулся со следующей проблемой.

Допустим, у меня есть файл, который содержит что-то вроде этого:

blah blah blah blah
more text
<tag1>something</tag1>
<tag2>something else</tag2>
blah blah meh whatever
foo bar

Я хочу заменить все вхождения tag1 на tag2, а все вхождения tag2 на tag1. Однако я не знаю, как это сделать, поскольку, если бы я использовал что-то вроде sed 's/tag1/tag2/g', а затем sed 's/tag2/tag1/g', я бы в итоге получил файл только с тегами tag1.

Мне нужно перевернуть два тега.

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 26 июля 2010

Как насчет простого добавления временного тега для первой замены. Примерно так:

sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g'
2 голосов
/ 26 июля 2010

Можете ли вы пройти через какой-то тег, которого, как вы знаете, нет в файле? т.е.

sed 's/tag1/tag99/g' 
sed 's/tag2/tag1/g'
sed 's/tag99/tag2/g'
0 голосов
/ 27 июля 2010
$ sed 's/tag1/tmp/g;s/tag2/tag1/g;s/tmp/tag2/g' file
0 голосов
/ 26 июля 2010

Замените tag1 чем-то уникальным (tag3), затем установите tag2 в tag1, затем установите tag3 в tag2.

...