Unix команда, чтобы grep только подстрока, начиная с "xyz ...." до первого пробела? - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть текст:

Это мой = тест и класс = 76

Это мой = тест и класс = 78

Это мой = тест2 икласс = 76

Это мой = test3 и класс = 75

Это мой = test1 и класс = 79.

Я хочу выполнить поиск по всему слову, начинающемуся с "class = "со значениями без печати всей строки, вывод должен быть:

class=76
class=78
class=76
class=75
class=79

любая команда, которая может помочь мне в этом?

Я пробовал это:

grep -E '(^|\s+)class=(?=\s|$)' file

но ничего не получалось.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Использование Perl-oneliner

> data="This is my=test and class=76 This is my=test and class=78 This is my=test2 and \n class=76 This is my=test3 and class=75 This is my=test1 and class=79."
> perl -0777 -ne ' { while(/(class=(\d+))/g) { print "$1\n" } } ' <<< "$data"                                                                                   
class=76
class=78
class=76
class=75
class=79
> 

Работает, даже если у вас есть данные в файле

> echo "$data" > gupta.txt
> perl -0777 -ne ' { while(/(class=(\d+))/g) { print "$1\n" } } ' gupta.txt 
class=76
class=78
class=76
class=75
class=79
> 
0 голосов
/ 22 ноября 2018

Ваш шаблон (^|\s+)class=(?=\s|$) не совместим с POSIX, поскольку содержит положительный прогноз (?=\s|$), который должен соответствовать местоположению, за которым следует пробел или конец строки.Поскольку вы хотите сопоставлять цифры сразу после class=, этот взгляд не имеет смысла даже в регулярном выражении PCRE.Группа (^|\s+) предназначена для соответствия началу строки или 1 или более пробелов, но, похоже, здесь подойдет только граница слова.

Вы можете использовать

grep -oE '\<class=[^ ]+' file

См. онлайн-демонстрация

Подробности

  • o - включает режим вывода, только выходы соответствуют
  • E- включает синтаксис POSIX ERE
  • \< - граница слова (вместо нее можно использовать \b)
  • class= - буквенная строка
  • [^ ]+- 1 или более символов, кроме пробела

Эквивалентная версия BRE POSIX:

grep -o '\<class=[^ ]*' file

Проверено с grep (GNU grep) 2.27 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...