grep несколько строк для шаблона соответствия

Это невозможно, если вы загружаете его в режиме реального времени, так как после перезагрузки все исчезнет. Вы можете устанавливать их каждый раз при загрузке iso, если инструменты не требуют перезагрузки. Вы можете установить этот ISO где-нибудь, чтобы изменения остались после перезагрузки. Вы можете отредактировать скрипт build.sh, чтобы он не запускался make clean, но это, вероятно, сломает некоторые другие вещи, поскольку make clean — это то, что вы делаете перед перекомпиляцией, чтобы убедиться, что вы получаете чистую сборку и не оставили -по -продуктам из предыдущих запусков.

0
26.12.2019, 12:28
2 ответа

Во-первых, регулярное предупреждение о том, что не выполняется разборls. Тем не менее, предполагая, что ваши файлы названы разумно, вы могли бы сделать:

ls debs/*1.1.16* | grep -E 'Package1|Package2|package3'

Единственная разница здесь в том, что я избегаю 1-го grep, который не нужен, так как вы можете напрямую передать шаблон glob в ls. Затем вместо устаревшего egrepя использую grep -E, что то же самое.

Однако по существу это то же самое, что и ваша команда. Если это не сработало, значит у вас нет подходящих файлов:

$ ls debs/
1.1.16.Package3  Package1.1.1.160  Package1.1.2.16  Package2.1.1.16
$ ls debs/*1.1.16* | grep -E 'Package1|Package2|package3'
debs/Package1.1.1.160
debs/Package2.1.1.16

Как и ожидалось, это показывает два совпадающих файла. И это именно то, что напечатала бы и ваша команда:

$ ls debs/* | grep 1.1.16 | egrep -e 'Package1|Package2|package3'
debs/Package1.1.1.160
debs/Package2.1.1.16

Обратите внимание, что поскольку package3является строчным(pвместоP)в шаблоне grep, файл 1.1.16.Package3не отображается.

1
28.01.2020, 02:38

Есть способ сделать это без парсинга lsвывода.

version=1.1.16
for package in debs/*Package1*${version}* \
               debs/*Package2*${version}* \
               debs/*package3*${version}*;
do
  action with $package;
done

Таким образом, оболочка будет расширять глобус и перебирать соответствующие файлы. Если ни один файл не соответствует предоставленным шаблонам, скрипт просто пропустит цикл без каких-либо ошибок.

Или попробуйтеfind:

version=1.1.16
find debs/ \( -name "*Package1*${version}*" -o -name "*Package2*${version}*" -o -name "*package3*${version}*" \)
0
28.01.2020, 02:38

Теги

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