Есть ли способ напечатать строки из файла от n до m и затем поменять их позиции местами?

#bash #sed

#bash #sed

Вопрос:

Я пытаюсь напечатать текст из строки 10-20, а затем поменять их позиции местами.

Я пробовал это:

 sed '10!G;h;$!d' file.txt
  

Но он печатает только от 10 до конца файла. Есть ли какой-либо способ остановить это в строке 20, используя только одну команду sed?

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

1. Я думаю, что возможен дубликат: unix.stackexchange.com/questions/9356 /…

Ответ №1:

Почти готово, вам просто нужно заменить $!d на ‘until’ номер строки

 sed -n '10,20p' tst.txt
// Prints line 10 <--> 20
  
 sed -n '10!G;h;20p' tst.txt
// Prints REVERSE line 10 <--> 20
  

вывод:

 20
19
18
17
16
15
14
13
12
11
10
  

tst.txt:

 1
2
3
4
...
19
20
  

Информация

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

1. О, это то, чего я хотел! Большое вам спасибо 🙂

2. другой способ sed ’10!G; h; 20b; d’

3. Или поскольку вы закончили, как только напечатали пространство шаблона sed '10!G;h;20!d;q' file

Ответ №2:

Вы можете использовать это для печати диапазона строк:

 sed -n -e 10,20p file.txt | tac
  

tac изменит порядок строк

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

1. Я знаю, что есть способ с помощью tac. Но мне нужно сделать это только с помощью одной команды sed. Я должен был упомянуть об этом в сообщении, извините.

Ответ №3:

И для тех из вас, у кого нет tac (например, у тех пользователей Mac):

 sed -n -e 10,20p file.txt | tail -r