MyTetra Share
Делитесь знаниями!
Как в bash вывести содержимое файла до конкретной строки?
Время создания: 04.07.2020 15:41
Текстовые метки: linux, bash, файл, вывод, часть файла, строка
Раздел: Компьютер - Linux - Bash - Команды и скрипты

Есть файл, в котором есть некая строка, например "---".


Задача: надо получить всю часть файла до первого появляения данной строки. Как это сделать? Вот так:



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}'



Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования