Вам может быть трудно найти многострочный шаблон. Поскольку этот ответ объяснен, вам, вероятно, нужно использовать pcregrep
:
pcregrep -M -f "$license_file" "$c_file"
Однако в этом есть некоторые проблемы, поскольку он не проверяет ни позицию (начало файла в вашем случае), ни шаблон для многострочной формы. Во-первых, содержимое в $license_file
должно быть похоже на
line 1\nline2\nline 3\nline 4\n
Так что, если вы можете отредактировать содержимое $license_file
в требуемом формате, проблема может быть продолжена как
pcregrep -HMf"$license_file" --line-offsets "$c_file" | grep -o "^$c_file:1:" | sed 's/...$//'
Опция --line-offsets
сообщит соответствующий номер строки, поэтому мы подбираем номер строки 1 и убираем номер строки, чтобы сообщить соответствующее имя файла. (Поскольку мы знаем, что номер строки = 1, а содержимое - в $license_file
, поэтому я предполагаю, что вы хотите сообщить о соответствующих именах файлов.)
Если вы не можете редактировать $license_file
, вы можете заменить его на sed
:
pcregrep -HMf <(sed -En '1h;2,4H;4{x;s/\n|$/\\n/g;p}' "$license_file") --line-offsets "$c_file" | grep -o "^$c_file:1:" | sed 's/...$//'