#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