Предположим, что 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
Вы можете заставить sed
завершить работу по шаблону с помощью sed '/ pattern / q'
, так что вам просто нужны ваши совпадения, а затем выйти при втором совпадении с шаблоном:
sed -n '/^pattern1/,/^pattern2/p;/^pattern2/q'
Таким образом будет показан только первый блок.
Как правило, с 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