Поскольку вам нужно сопоставить контент, не включая его в результат (должен совпадать, name="
но не является частью желаемого результата), требуется некоторая форма сопоставления нулевой ширины или группового захвата. Это легко сделать с помощью следующих инструментов:
Perl
С Perl вы можете использовать n
опцию для цикла построчно и распечатать содержимое группы захвата, если оно совпадает:
perl -ne 'print "$1\n" if /name="(.*?)"/' filename
GNU grep
Если у вас есть улучшенная версия grep, такая как GNU grep, у вас может быть -P
доступная опция. Эта опция включит регулярное выражение, подобное Perl, что позволит вам использовать \K
сокращенный просмотр назад. Он сбросит положение совпадения, поэтому все, что до него, будет нулевой шириной.
grep -Po 'name="\K.*?(?=")' filename
Эта o
опция заставляет grep печатать только совпавший текст, а не всю строку.
Vim - текстовый редактор
Другой способ - напрямую использовать текстовый редактор. В Vim одним из различных способов добиться этого было бы удаление строк без
name=
и последующее извлечение содержимого из полученных строк:
:v/.*name="\v([^"]+).*/d|%s//\1
Стандартный grep
Если по какой-то причине у вас нет доступа к этим инструментам, нечто подобное можно сделать с помощью стандартного grep. Однако без осмотра позже потребуется некоторая очистка:
grep -o 'name="[^"]*"' filename
Примечание о сохранении результатов
Результаты всех вышеперечисленных команд будут отправлены по адресу stdout
. Важно помнить, что вы всегда можете сохранить их, подключив его к файлу, добавив:
> result
до конца команды.