найти уникальные результаты только в grep

Это различие между родительской и дочерней оболочками.

Когда вы запускаете test.sh , запускается новая оболочка для его запуска; переменная экспортируется в эту оболочку. Это означает, что новая оболочка знает об этом и всех своих дочерних элементах. На родительскую оболочку, из которой вы запустили test.sh , это никак не влияет (и не может быть).

Чтобы увидеть переменную в вашей текущей оболочке, вам нужно вместо этого создать исходный сценарий:

. test.sh

(с пробелом между . и test.sh ). Это запустит test.sh без запуска новой оболочки.

2
05.08.2016, 01:19
1 ответ

Есть возможность показать только первое совпадение. Обратите внимание:

$ grep -iE "(foo|bar|test|something)" filename.txt
Foo 1
Bar 2
foo 3
Foo 4

Теперь, чтобы ограничить это первым совпадением, добавьте -m1 :

$ grep -iEm1 "(foo|bar|test|something)" filename.txt
Foo 1

Ограничение состоит в том, что это покажет только первое совпадение, а не первое foo а также первую полосу и т. д.

Печать первого из нескольких различных совпадений

Рассмотрим этот тестовый файл:

$ cat filename.txt
Foo 1
Bar 2
foo 3
Foo 4
test 5
test 6

Чтобы распечатать первое совпадение для каждого из трех показанных регулярных выражений:

$ awk -v a='[fF]oo [bB]ar [tT]est' 'BEGIN{split(a,b," ")} {for (i in b) if ($0~b[i] && !c[i]) {print; c[i]++}}' filename.txt
Foo 1
Bar 2
test 5

Это работает путем помещения любых регулярных выражений, которые вы хотите сопоставить, в переменную a . a разбивается на слова и помещается в массив b . Каждое из регулярных выражений в b проверяется для каждой строки, и печатается только первое совпадение для каждой.

1
27.01.2020, 22:19

Теги

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