Есть файл, в котором есть некая строка, например "---".
Задача: надо получить всю часть файла до первого появляения данной строки. Как это сделать? Вот так:
sed '/---/,$ d' < file.txt
Задача: надо получить всю часть файла после первого появляения данной строки. Как это сделать? Вот так:
sed '1,/---/ d' < file.txt
В обоих командах, сама строка "---" в конечный вывод не попадает.
Решение можно сделать через grep:
#Вывести строки после, включая строку:
grep -A <num_rows> <pattern> <file>
#Вывести строки до, включая строку:
grep -B <num_rows> <pattern> <file>
В <num_rows> подставляешь выхлоп cat <file> | wc -l
А так же можно решить задачу через утилиту awk. Исходный файл:
$ cat text.txt
1
2
3
---
4
5
Начало файла до разделителя:
$ cat text.txt | awk '{ print } $0 == "---" { exit(0) }'
1
2
3
---
Хвост файла после разделителя:
$ cat text.txt | awk 'go { print } $0 == "---" { go = 1 }'
4
5
И еще одно решение на awk, с более комактной записью:
# Исключая разделитель
cat file.txt | awk '/---/{exit 0}{print $0}'
# Включая разделитель
cat file.txt | awk '{print $0}/---/{exit 0}'