Распечатать строки файла между двумя совпадающими шаблонами [дубликат]

Предположим, что active-users.txt не имеет пустых строк:

grep -f active-users.txt all-users.txt > active-users-info.txt

Если active-users.txt содержит одну или несколько пустых строк:

grep '.' active-users.txt | grep -f - all-users.txt > active-users-info.txt
17
22.02.2016, 13:27
2 ответа

Вы можете заставить sed завершить работу по шаблону с помощью sed '/ pattern / q' , так что вам просто нужны ваши совпадения, а затем выйти при втором совпадении с шаблоном:

sed -n '/^pattern1/,/^pattern2/p;/^pattern2/q'

Таким образом будет показан только первый блок.

45
27.01.2020, 19:47

Как правило, с sed легко печатать строки от одного совпадения к другому включительно:

$ seq 1 100 > test
$ sed -n '/^12$/,/^15$/p' test
12
13
14
15

С awk, вы можете сделать то же самое, вот так:

$ awk '/^12$/{flag=1}/^15$/{print;flag=0}flag' test
12
13
14
15

Вы можете сделать их не включающими, вот так:

$ awk '/^12$/{flag=1;next}/^15$/{flag=0}flag' test
13
14

$ sed -n '/^12$/,/^15$/p' test | sed '1d;$d'
13
14
9
27.01.2020, 19:47

Теги

Похожие вопросы