Это совершенно неуместное задание для sed.Просто используйте awk, например, с GNU awk для редактирования «на месте», так как это почему-то является приоритетом, и используйте измененный пример входного файла, чтобы было ясно, какие строки поменялись местами, а какие нет:
$ cat file
with a some code here
and a some code there
Line-a
Line-b
Line-c
Line-d
Line-e
Line-f
here a code, there a code
everywhere a code, code
$ awk -i inplace 'NR>=3 && NR<=8{if ((++c)%2) p=$0; else print $0 ORS p; next} 1' file
$ cat file
with a some code here
and a some code there
Line-b
Line-a
Line-d
Line-c
Line-f
Line-e
here a code, there a code
everywhere a code, code
Кроме синтаксического сахара -i inplace
только для GNU вместо > tmp && mv tmp file
, скрипт будет работать с использованием любого awk в любой оболочке на любом компьютере UNIX.
Исходный ответ и другие примеры ниже:
$ awk 'NR%2{p=$0;next} {print $0 ORS p}' file
Some code...
Some code...
Line-b
Line-a
Line-d
Line-c
Line-f
Line-e
Вышеприведенное будет работать при использовании любого awk в любой оболочке на любом компьютере UNIX.
Хотите поменять местами только строки 4 и 7, скажем?Это тривиальная настройка, потому что это правильный инструмент для работы :
$ seq 10 | awk 'NR<=3 || NR>=8{print; next} (++c)%2{p=$0;next} {print $0 ORS p}'
1
2
3
5
4
7
6
8
9
10
или, если вы предпочитаете:
$ seq 10 | awk 'NR>=4 && NR<=7{if ((++c)%2) p=$0; else print $0 ORS p; next} 1'
1
2
3
5
4
7
6
8
9
10
Хотите повернуть каждые 3 строки?Опять же, тривиально, потому что это правильный инструмент для работы :
$ seq 9 | awk 'NR%3{p2=p1;p1=$0;next} {print $0 ORS p1 ORS p2}'
3
2
1
6
5
4
9
8
7
Надеюсь, вы получите картину ...